#include <bits/stdc++.h>
using namespace std;
pair<int, int> arr[300002];
int bucks[300002], N, K, T, S;
bool check(int v) {
  int curTime = 0;
  for (int i = 1; i <= K; i++) {
    if (v < bucks[i] - bucks[i - 1]) return false;
    int F = bucks[i] - bucks[i - 1], S = 0;
    S = min(v - F, F);
    F -= S;
    curTime = curTime + F * 2 + S;
  }
  if (curTime > T)
    return false;
  else
    return true;
}
int main() {
  scanf("%i%i%i%i", &N, &K, &S, &T);
  for (int i = 1; i <= N; i++) {
    scanf("%i%i", &arr[i].first, &arr[i].second);
  }
  for (int i = 1; i <= K; i++) {
    scanf("%i", &bucks[i]);
  }
  bucks[++K] = S;
  sort(bucks + 1, bucks + K + 1);
  int L = 1, R = 1e9 + 1;
  while (L <= R) {
    int mid = (L + R) / 2;
    if (check(mid))
      R = mid - 1;
    else
      L = mid + 1;
  }
  int result = 1e9 + 1;
  for (int i = 1; i <= N; i++) {
    if (arr[i].second >= L) result = min(result, arr[i].first);
  }
  cout << (result == 1e9 + 1 ? -1 : result);
  return 0;
}
