#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
long long s, t;
long long g[N];
int n, k;
vector<pair<long long, long long> > x, c;
long long check(long long x, long long y, long long v) {
  long long k = min((y - x), v - (y - x));
  if (k < 0) {
    return -1;
  } else
    return (2 * (y - x) - k);
}
int main() {
  std::ios_base::sync_with_stdio(false);
  cin >> n >> k >> s >> t;
  long long ci, vi;
  for (int i = 0; i < n; i++) {
    cin >> ci >> vi;
    x.push_back(make_pair(-ci, vi));
  }
  for (int i = 0; i < k; i++) {
    cin >> g[i];
  }
  g[k] = 0;
  g[k + 1] = s;
  sort(g, g + k + 2);
  sort(x.begin(), x.end());
  long long maxi = x[n - 1].second;
  for (int i = n - 1; i >= 0; i--) {
    if (x[i].second >= maxi) {
      c.push_back(make_pair(-x[i].first, x[i].second));
      maxi = x[i].second;
    }
  }
  reverse(c.begin(), c.end());
  int l = -1, r = c.size();
  while (r - l > 1) {
    int m = (l + r) / 2;
    long long ans = 0;
    bool flag = false;
    for (int i = 1; i < k + 2; i++) {
      if (check(g[i - 1], g[i], c[m].second) == -1)
        flag = true;
      else
        ans += check(g[i - 1], g[i], c[m].second);
    }
    if (!flag && ans <= t)
      l = m;
    else
      r = m;
  }
  if (l == -1)
    cout << -1 << endl;
  else
    cout << c[l].first << endl;
  return 0;
}
