#include <bits/stdc++.h>
using namespace std;
const long long inf = 1100000000000000000;
const long double PI =
    3.141592653589793238462643383279502884197169399375105820974944;
long long n, k, s, t;
vector<pair<long long, long long>> v, best;
long long g[1000005];
bool chk(long long idx) {
  long long cap = best[idx].second;
  long long time = 0, prev = 0;
  for (long long i = 0; i < k + 1; i++) {
    long long dis = g[i] - prev;
    long long nm = dis * 2;
    if (dis > cap) return 0;
    long long x = min(cap - dis, dis);
    long long am = nm - x;
    time += am;
    if (time > t) return 0;
    prev = g[i];
  }
  return 1;
}
void solve() {
  cin >> n >> k >> s >> t;
  v = vector<pair<long long, long long>>(n);
  for (auto &i : v) cin >> i.first >> i.second;
  for (long long i = 0; i < k; i++) cin >> g[i];
  g[k] = s;
  sort(g, g + k);
  sort((v).begin(), (v).end());
  for (auto i : v) {
    if ((long long)((best).size())) {
      auto &it = best.back();
      if (it.first == i.first)
        it.second = max(it.second, i.second);
      else if (it.second < i.second)
        best.push_back(i);
    } else
      best.push_back(i);
  }
  long long lb = 0, rb = (long long)((best).size()) - 1, ans = -1;
  while (lb <= rb) {
    long long mid = (lb + rb) / 2;
    if (chk(mid)) {
      ans = best[mid].first;
      rb = mid - 1;
    } else
      lb = mid + 1;
  }
  cout << ans;
}
signed main() {
  ios_base::sync_with_stdio(false), cin.tie(nullptr);
  long long T = 1;
  while (T--) {
    solve();
    cout << '\n';
  }
  return 0;
}
