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 dX[8] = {1, 0, 0, -1, -1, -1, 1, 1};
int dY[8] = {0, 1, -1, 0, -1, 1, -1, 1};
int dx[4] = {1, 0, 0, -1};
int dy[4] = {0, 1, -1, 0};
long double EPS = 1e-9;
long long int mod = 1e9 + 7;
const int N = 1e3 + 10, M = 1e4, OO = 0x3f3f3f3f;
int n, g, second, x;
bool globalAns = 0;
long long int c[200010], p[200010], gs[200010];
long long int l, h, mid, prvMid = -1, mx;
long long int e3mlElSa7() {
  h += 20;
  while (l < h) {
    mid = (l + h) / 2;
    if (mid == prvMid) ++mid;
    prvMid = mid;
    bool v = 1;
    long long int curr = 0, t = 0;
    for (int i = 0; i < g && v; i++) {
      long long int d = gs[i] - curr;
      if (d > mid) v = 0;
      t += d * 2;
      long long int rem = mid - d;
      t -= min(rem, d);
      curr = gs[i];
    }
    if (v && t <= x) {
      globalAns = 1;
      h = mid;
    } else
      l = mid + 1;
  }
  return l;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  ;
  cin >> n >> g >> second >> x;
  for (int i = 0; i < n; i++) {
    cin >> p[i] >> c[i];
    h = max(h, c[i]);
  }
  mx = h;
  for (int i = 0; i < g; i++) cin >> gs[i];
  sort(gs, gs + g);
  ++g;
  gs[g - 1] = second;
  long long int ans = e3mlElSa7();
  if (!globalAns || ans > mx) return cout << -1 << endl, 0;
  long long int pr = 1e9 + 1000;
  for (int i = 0; i < n; i++)
    if (c[i] >= ans) pr = min(pr, p[i]);
  cout << pr << endl;
  return 0;
}
