1 1 2 2
1000000000 1000000000
1
 1 1 1000000000 1000000000
100 1000000000
1
 1 1 10 18
5 6
5
 2 1 1000000000 2000000000
111 999999999
101 999999998
1
 4 13 400 600
13 30
1 19
1 160
1 113
58 73 15 319 194 362 128 157 336 162 77 90 96
 1 15 100 200
283 8
30 58 16 45 80 82 55 95 24 23 86 28 51 47 20
 3 2 300 400
24 68
13 65
15 113
127 177
 1 1 2 1
1 10
1
 4 2 7 15
10 9
4 4
9 3
4 10
1 6
 2 1 1000000000 2000000000
111 1000000000
101 1000000000
5
 2 1 1000000000 2000000000
111 999999998
101 999999998
1
 1 1 1000000000 1000000000
1 1000000000
1

1000000000
 -1
 5
 111
 1
 -1
 -1
 -1
 4
 101
 -1
 -1

#include <bits/stdc++.h>
using namespace std;
int n, k, s, t, z[200010];
pair<int, int> a[200010];
int check(int zn) {
  int cur_t = 0;
  bool check = true;
  pair<int, int> cur = a[zn];
  for (int i = 1; i <= k + 1; i++) {
    if (!check) {
      cur_t = 2e9 + 123;
      break;
    }
    int curs = z[i] - z[i - 1];
    int l1 = 0, r1 = curs, m1, sl, ft;
    while (l1 + 1 < r1) {
      m1 = (l1 + r1) / 2;
      sl = curs - m1;
      ft = m1;
      if (sl + ft * 2 < cur.first)
        l1 = m1;
      else
        r1 = m1;
    }
    sl = curs - r1;
    ft = r1;
    if (sl + 2 * ft <= cur.first) {
      cur_t += sl * 2 + ft;
    } else {
      sl = curs - l1;
      ft = l1;
      if (sl + ft * l1 <= cur.first) {
        cur_t += sl * 2 + ft;
      } else {
        check = false;
      }
    }
  }
  if (check == false) cur_t = 2e9 + 123;
  return cur_t;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n >> k >> s >> t;
  for (int i = 1; i <= n; i++) {
    cin >> a[i].second >> a[i].first;
  }
  for (int i = 1; i <= k; i++) {
    cin >> z[i];
  }
  sort(z + 1, z + k + 1);
  sort(a + 1, a + n + 1);
  z[k + 1] = s;
  int l = 1, r = n, m;
  while (l + 1 < r) {
    m = (l + r) / 2;
    int cur_t = check(m);
    if (cur_t <= t)
      l = m;
    else
      r = m;
  }
  int cur_t = check(l);
  if (cur_t <= t) {
    int ans = 2e9 + 123;
    for (int i = 1; i <= n; i++) {
      if (a[i].first >= a[l].first) ans = min(ans, a[i].second);
    }
    cout << ans;
  } else {
    cur_t = check(r);
    if (cur_t <= t) {
      int ans = 2e9 + 123;
      for (int i = 1; i <= n; i++) {
        if (a[i].first >= a[r].first) ans = min(ans, a[i].second);
      }
      cout << ans;
    } else
      cout << -1;
  }
  return 0;
}
