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>
const int MaxN = 3e5 + 10, inf = 2e9;
namespace IO {
char buf[1 << 15], *fs, *ft;
inline char getc() {
  return (ft == fs &&
          (ft = (fs = buf) + fread(buf, 1, 1 << 15, stdin), ft == fs))
             ? 0
             : *fs++;
}
template <typename T>
inline void read(T &x) {
  x = 0;
  T f = 1, ch = getchar();
  while (!isdigit(ch) && ch ^ '-') ch = getchar();
  if (ch == '-') f = -1, ch = getchar();
  while (isdigit(ch)) x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar();
  x *= f;
}
char Out[1 << 24], *fe = Out;
inline void flush() {
  fwrite(Out, 1, fe - Out, stdout);
  fe = Out;
}
template <typename T>
inline void write(T x, char str) {
  if (!x) *fe++ = 48;
  if (x < 0) *fe++ = '-', x = -x;
  T num = 0, ch[20];
  while (x) ch[++num] = x % 10 + 48, x /= 10;
  while (num) *fe++ = ch[num--];
  *fe++ = str;
}
}  // namespace IO
using IO::read;
using IO::write;
template <typename T>
inline bool chkMin(T &a, const T &b) {
  return a > b ? (a = b, true) : false;
}
template <typename T>
inline bool chkMax(T &a, const T &b) {
  return a < b ? (a = b, true) : false;
}
template <typename T>
inline T min(T a, T b) {
  return a < b ? a : b;
}
template <typename T>
inline T max(T a, T b) {
  return a > b ? a : b;
}
int n, k, s, t;
int c[MaxN], v[MaxN], d[MaxN];
inline bool check(int v) {
  long long sum = 0;
  for (int i = 1; i <= k; ++i) {
    int s = d[i] - d[i - 1];
    long long x = v - s, y = (s << 1) - v;
    if (x < 0) return 0;
    if (y < 0)
      sum += s;
    else
      sum += x + (y << 1);
  }
  return sum <= t;
}
int main() {
  read(n), read(k), read(s), read(t);
  for (int i = 1; i <= n; ++i) read(c[i]), read(v[i]);
  for (int i = 1; i <= k; ++i) read(d[i]);
  d[++k] = s;
  std::sort(d + 1, d + k + 1);
  long long l = 0, r = inf, V = inf;
  while (l <= r) {
    long long mid = (l + r) >> 1;
    if (check(mid))
      r = mid - 1, V = mid;
    else
      l = mid + 1;
  }
  long long ans = inf;
  for (int i = 1; i <= n; ++i)
    if (v[i] >= V) chkMin(ans, (long long)c[i]);
  write(ans == inf ? -1 : ans, '\n');
  IO::flush();
  return 0;
}
