#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 123;
const int mod = 1e9 + 7;
const int INF = 1e9 + 1;
const long long INFL = 1e18 + 1;
const double eps = 1e-9;
const double pi = acos(-1.0);
int n, k, second, t, mn = INF;
pair<int, int> a[N];
int g[N];
int arrive(int len, int volume) {
  int l = 0, r = len, ans = -1;
  while (l <= r) {
    int mid = (l + r) >> 1;
    if (mid * 2 + len - mid <= volume) {
      l = mid + 1;
      ans = mid;
    } else
      r = mid - 1;
  }
  return ans + (len - ans) * 2;
}
bool can(int volume) {
  int pos = 0, when = 0;
  for (int i = 1; i <= k; i++) {
    int len = g[i] - pos;
    if (len > volume) return 0;
    when += arrive(len, volume);
    if (when > t) return 0;
    pos = g[i];
  }
  return (when <= t);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> k >> second >> t;
  for (int i = 1; i <= n; i++) {
    int c, v;
    cin >> c >> v;
    a[i] = make_pair(v, c);
  }
  for (int i = 1; i <= k; i++) cin >> g[i];
  g[++k] = second;
  sort(g + 1, g + k + 1);
  sort(a + 1, a + n + 1);
  int l = 1, r = n, ans = -1;
  while (l <= r) {
    int mid = (l + r) >> 1;
    if (can(a[mid].first)) {
      r = mid - 1;
      ans = a[mid].first;
    } else
      l = mid + 1;
  }
  if (ans == -1) {
    cout << ans;
    return 0;
  }
  for (int i = 1; i <= n; i++)
    if (a[i].first >= ans) mn = min(mn, a[i].second);
  cout << (mn == -INF ? -1 : mn);
  return 0;
}
