#include <bits/stdc++.h>
using namespace std;
template <typename T>
T getint() {
  T x = 0, p = 1;
  char ch;
  do {
    ch = getchar();
  } while (ch <= ' ');
  if (ch == '-') p = -1, ch = getchar();
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  return x * p;
}
template <typename T1, typename T2>
bool umin(T1 &x, const T2 &y) {
  if (x > y) return x = y, true;
  return false;
}
template <typename T1, typename T2>
bool umax(T1 &x, const T2 &y) {
  if (x < y) return x = y, true;
  return false;
}
const int maxn = (int)1e6 + 10;
const int inf = (int)1e9 + 5;
const int mod = (int)1e9 + 7;
const long long llinf = (long long)1e18 + 5;
const long double pi = acos(-1.0);
int c[maxn];
int v[maxn];
int x[maxn];
int k;
long long calc(long long v) {
  long long t = 0;
  for (int i = (0); i < (k + 1); i++) {
    long long D = x[i + 1] - x[i];
    if (D > v) return llinf;
    if (v >= 2 * D) {
      t += D;
      continue;
    }
    long long a = v - D;
    t += a + 2 * (D - a);
  }
  return t;
}
int main() {
  int n = getint<int>();
  k = getint<int>();
  int s = getint<int>();
  int t = getint<int>();
  for (int i = (0); i < (n); i++) {
    c[i] = getint<int>();
    v[i] = getint<int>();
  }
  int mx = 0;
  for (int i = (1); i < (k + 1); i++) x[i] = getint<int>();
  x[k + 1] = s;
  sort(x, x + k + 2);
  long long l = 0, r = llinf;
  while (r - l > 1) {
    long long m = (l + r) / 2;
    if (calc(m) <= t) {
      r = m;
    } else
      l = m;
  }
  int res = -1;
  for (int i = (0); i < (n); i++) {
    if (v[i] < r) continue;
    if (res == -1 || res > c[i]) res = c[i];
  }
  printf("%d\n", res);
  return 0;
}
