#include <bits/stdc++.h>
using namespace std;
inline long long gcd(long long a, long long b) {
  a = ((a) < 0 ? -(a) : (a));
  b = ((b) < 0 ? -(b) : (b));
  while (b) {
    a = a % b;
    swap(a, b);
  }
  return a;
}
const long long inf = 2147383647;
const long long mod = 1000000007;
const double pi = 2 * acos(0.0);
const double eps = 1e-9;
int n, k, s, maxsofar, pos;
pair<int, int> ar[200005], br[200005];
int cr[200005];
int t;
int f(int id) {
  int cap = br[id].second;
  int Time = 0, x;
  for (int i = 1; i <= k + 1; i++) {
    x = cr[i] - cr[i - 1];
    if (x > cap) return 0;
    Time += x + x;
    Time -= min(x, cap - x);
  }
  if (Time > t) return 0;
  return 1;
}
int main() {
  int x;
  cin >> n >> k >> s >> t;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &ar[i].first);
    scanf("%d", &ar[i].second);
    ar[i].second *= -1;
  }
  sort(ar + 1, ar + n + 1);
  maxsofar = -1;
  pos = 0;
  for (int i = 1; i <= n; i++) {
    x = -ar[i].second;
    if (x > maxsofar) {
      maxsofar = x;
      br[++pos] = ar[i];
      br[pos].second *= -1;
    }
  }
  cr[0] = 0;
  cr[k + 1] = s;
  for (int i = 1; i <= k; i++) {
    scanf("%d", &cr[i]);
  }
  sort(cr + 1, cr + k + 1);
  int ans = 2e9, low = 1, high = pos, md;
  while (low <= high) {
    md = (low + high) >> 1;
    if (f(md)) {
      ans = md;
      high = md - 1;
    } else {
      low = md + 1;
    }
  }
  if (ans == 2e9)
    printf("-1\n");
  else
    printf("%d\n", br[ans].first);
  return 0;
}
