#include <bits/stdc++.h>
using namespace std;
int n, k, s, t, c, v;
int g[1234567];
pair<int, int> a[1234567];
bool dovoljno(int gorivo) {
  int pos = 0;
  int vrij = 0;
  for (int i = 0; i < k; i++) {
    if (gorivo < g[i] - pos) {
      return false;
    } else {
      int slow = g[i] - pos, fast = 0;
      if (gorivo > slow) {
        fast = min(gorivo - slow, slow);
      }
      slow -= fast;
      vrij += fast + slow * 2;
      if (vrij > t) return false;
      pos = g[i];
    }
  }
  if (vrij > t) {
    return false;
  }
  return true;
}
int binarno() {
  int lo = 0, hi = s, mid;
  while (lo + 1 < hi) {
    mid = (lo + hi) / 2;
    if (dovoljno(mid)) {
      hi = mid;
    } else {
      lo = mid;
    }
  }
  if (dovoljno(hi)) {
    return hi;
  } else {
    return -1;
  }
}
int main() {
  scanf("%d %d %d %d", &n, &k, &s, &t);
  for (int i = 0; i < n; i++) {
    scanf("%d %d", &c, &v);
    a[i] = make_pair(v, c);
  }
  for (int i = 0; i < k; i++) {
    scanf("%d", g + i);
  }
  g[k++] = s;
  sort(g, g + k);
  int w = binarno();
  int mincost = INT_MAX;
  for (int i = 0; i < n; i++) {
    if (a[i].first >= w) mincost = min(mincost, a[i].second);
  }
  if (mincost == INT_MAX || w == -1) {
    cout << -1 << endl;
  } else {
    cout << mincost << endl;
  }
  return 0;
}
