#include <bits/stdc++.h>
using namespace std;
const int MAXNK = 2e5 + 10;
const long long INF = 1e18;
struct abc {
  int c, v;
};
abc a[MAXNK];
int p[MAXNK];
int n, k, s;
long long t;
long long fi = INF;
bool cmp1(abc a, abc b) { return a.v < b.v; }
bool judge(int sum) {
  long long tt = 0;
  for (int i = 1; i <= k; i++) {
    int dis = p[i] - p[i - 1];
    if (dis * 2 <= sum)
      tt += p[i] - p[i - 1];
    else {
      if (sum >= dis) {
        tt += 3 * dis - sum;
      } else {
        return false;
      }
    }
    if (tt > t) return false;
  }
  return true;
}
int main() {
  cin >> n >> k >> s >> t;
  for (int i = 1; i <= n; i++) scanf("%d%d", &a[i].c, &a[i].v);
  p[0] = 0;
  for (int i = 1; i <= k; i++) scanf("%d", &p[i]);
  sort(a + 1, a + 1 + n, cmp1);
  sort(p + 1, p + 1 + k);
  k++;
  p[k] = s;
  int l = 1, r = n, ans = -1;
  while (l <= r) {
    int m = (l + r) >> 1;
    if (judge(a[m].v)) {
      ans = m;
      r = m - 1;
    } else
      l = m + 1;
  }
  if (ans == -1) {
    puts("-1");
    return 0;
  }
  for (int i = 1; i <= n; i++) {
    if (a[i].v >= a[ans].v && a[i].c < fi) fi = a[i].c;
  }
  cout << fi << endl;
  return 0;
}
