#include <bits/stdc++.h>
using namespace std;
const int MXK = 2 * 1e5 + 2;
const int MXN = 2 * 1e5 + 2;
long long N, K, S, T;
int G[MXK] = {};
pair<long long, long long> A[MXN] = {};
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> N >> K >> S >> T;
  for (int x = 0; x < N; x++) cin >> A[x].first >> A[x].second;
  for (int x = 0; x < K; x++) cin >> G[x + 1];
  G[K + 1] = S;
  sort(G + 1, G + K + 1);
  long long low1 = 0, high1 = 1e9, ans1 = 1e9 + 1;
  while (low1 <= high1) {
    long long lims = (low1 + high1) / 2LL;
    long long t = 0;
    for (int i = 0; i < K + 1; i++) {
      long long len = G[i + 1] - G[i];
      long long low = 0, high = len, mid, ans = -1;
      while (low <= high) {
        mid = (low + high) / 2;
        long long lits = 2LL * mid;
        if ((len - mid) + lits <= lims) {
          ans = max(ans, mid);
          low = mid + 1;
        } else {
          high = mid - 1;
        }
      }
      if (ans == -1) {
        t = -1;
        break;
      } else {
        long long l = min(ans, len) + max(2LL * (len - ans), 0LL);
        t += l;
      }
    }
    if (t != -1 && t <= T) {
      ans1 = min(ans1, lims);
      high1 = lims - 1;
    } else {
      low1 = lims + 1;
    }
  }
  long long v = -1;
  for (int x = 0; x < N; x++)
    if (A[x].second >= ans1) {
      if (v == -1)
        v = A[x].first;
      else
        v = min(A[x].first, v);
    }
  cout << v << "\n";
}
