#include <bits/stdc++.h>
using namespace std;
long long n, k, s, t, c[200010], v[200010], g[200010], l, r, mid, flag, cost,
    ans;
inline bool check(long long x) {
  long long tot = 0;
  for (int i = 1; i <= k; i++) {
    long long dis = g[i] - g[i - 1];
    if (dis > x) return false;
    if (dis * 2 <= x)
      tot += dis;
    else
      tot += 3 * dis - x;
  }
  if (tot > t)
    return false;
  else
    return true;
}
int main() {
  scanf("%lld%lld%lld%lld", &n, &k, &s, &t);
  for (int i = 1; i <= n; i++) scanf("%lld%lld", &c[i], &v[i]);
  for (int i = 1; i <= k; i++) scanf("%lld", &g[i]);
  g[0] = 0;
  g[k + 1] = s;
  k++;
  sort(g, g + k + 1);
  flag = 0;
  l = 0;
  r = s * 2;
  while (l <= r) {
    mid = (l + r) >> 1;
    if (check(mid)) {
      ans = mid;
      flag = 1;
      r = mid - 1;
    } else
      l = mid + 1;
  }
  if (!flag) {
    printf("-1");
    return 0;
  }
  cost = 2000000000000;
  for (int i = 1; i <= n; i++)
    if (v[i] >= ans) cost = min(cost, c[i]);
  if (cost == 2000000000000)
    printf("-1");
  else
    printf("%lld", cost);
  return 0;
}
