#include <bits/stdc++.h>
const int oo = 0x3f3f3f3f;
const double PI = acos(-1.0);
const double EPS = 1e-8;
using namespace std;
const int N = 200005;
struct node {
  int c, v;
} car[N];
int g[N];
int read() {
  int d, f = 1;
  char c;
  while (!isdigit(c = getchar()))
    if (c == '-') f = -1;
  d = c - '0';
  while (isdigit(c = getchar())) d = d * 10 + c - '0';
  return d * f;
}
bool cmp(node a, node b) { return a.v < b.v; }
bool judge(int n, int k, int s, int t, int v) {
  long long time = 0;
  int cur = 0;
  for (int i = 0; i <= k; ++i) {
    if (g[i] - cur > v) return false;
    if ((g[i] - cur) * 2 <= v)
      time += g[i] - cur;
    else
      time += 3ll * (g[i] - cur) - v;
    if (time > t) return false;
    cur = g[i];
  }
  return true;
}
int bin(int n, int val) {
  int l = 0, r = n - 1;
  while (l < r) {
    int m = (l + r) >> 1;
    if (car[m].v < val)
      l = m + 1;
    else
      r = m;
  }
  return l;
}
int main() {
  int n, k, s, t;
  while (cin >> n >> k >> s >> t) {
    for (int i = 0; i < n; ++i) car[i].c = read(), car[i].v = read();
    sort(car, car + n, cmp);
    for (int i = 0; i < k; ++i) g[i] = read();
    sort(g, g + k);
    g[k] = s;
    int l = car[0].v, r = car[n - 1].v, flag = 0;
    while (l < r) {
      int m = (l + r) >> 1;
      if (judge(n, k, s, t, m))
        r = m, flag = 1;
      else
        l = m + 1;
    }
    int ans = oo;
    if (flag || judge(n, k, s, t, l))
      for (int i = bin(n, l); i < n; ++i) ans = min(ans, car[i].c);
    else
      ans = -1;
    cout << ans << endl;
  }
  return 0;
}
