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;
const long long MAX = 200100;
const long long TOP = 2e9;
long long N, K, S, T;
long long C[MAX], V[MAX];
long long G[MAX], lo, hi;
long long g(long long v, long long d) {
  if (d > v) return TOP + 10;
  long long f = min(v - d, d);
  return f + (d - f) * 2;
}
bool p(long long v) {
  long long t = 0;
  t += g(v, G[0]);
  for (long long I = 0; I < K - 1; I++) t += g(v, G[I + 1] - G[I]);
  t += g(v, S - G[K - 1]);
  return t <= T;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> N >> K >> S >> T;
  for (long long I = 0; I < N; I++) {
    cin >> C[I] >> V[I];
  }
  for (long long I = 0; I < K; I++) cin >> G[I];
  sort(G, G + K);
  if (S > T) {
    cout << -1 << endl;
    return 0;
  }
  lo = 1;
  hi = 2 * S;
  while (lo < hi) {
    long long mi = (lo + hi) / 2;
    if (p(mi))
      hi = mi;
    else
      lo = mi + 1;
  }
  long long sol = TOP + 10;
  for (long long I = 0; I < N; I++)
    if (V[I] >= lo) sol = min(sol, C[I]);
  if (sol > TOP) sol = -1;
  cout << sol << endl;
}
