#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long LINF = 0x3f3f3f3f3f3f3f3f;
const int MOD = (int)1e9 + 7;
const int N = (int)1e6 + 7;
int n, k, s, t;
int c[N], v[N], g[N];
bool check(int M) {
  int tim = 0;
  for (int i = (1); i < (k + 2); ++i) {
    int d = g[i] - g[i - 1];
    if (M < d)
      return false;
    else if (2 * d < M)
      tim += d;
    else
      tim += 3 * d - M;
  }
  return tim <= t;
}
void Init() {
  g[0] = 0;
  g[k + 1] = s;
  for (int i = (1); i < (n + 1); ++i) scanf("%d%d", c + i, v + i);
  for (int i = (1); i < (k + 1); ++i) scanf("%d", g + i);
  sort(g + 1, g + k + 1);
}
int Solve() {
  int L = 2, R = 2e9;
  while (L < R) {
    int M = L + ((R - L) >> 1);
    if (check(M))
      R = M;
    else
      L = M + 1;
  }
  if (!check(L)) return puts("-1");
  int ans = INF;
  for (int i = (1); i < (n + 1); ++i)
    if (v[i] >= L) ans = min(ans, c[i]);
  return printf("%d\n", ans == INF ? -1 : ans);
}
int main() {
  while (~scanf("%d%d%d%d", &n, &k, &s, &t)) {
    Init();
    Solve();
  }
  return 0;
}
