1 1 2 2
1000000000 1000000000
1
 1 1 1000000000 1000000000
100 1000000000
1
 1 1 10 18
5 6
5
 2 1 1000000000 2000000000
111 999999999
101 999999998
1
 4 13 400 600
13 30
1 19
1 160
1 113
58 73 15 319 194 362 128 157 336 162 77 90 96
 1 15 100 200
283 8
30 58 16 45 80 82 55 95 24 23 86 28 51 47 20
 3 2 300 400
24 68
13 65
15 113
127 177
 1 1 2 1
1 10
1
 4 2 7 15
10 9
4 4
9 3
4 10
1 6
 2 1 1000000000 2000000000
111 1000000000
101 1000000000
5
 2 1 1000000000 2000000000
111 999999998
101 999999998
1
 1 1 1000000000 1000000000
1 1000000000
1

1000000000
 -1
 5
 111
 1
 -1
 -1
 -1
 4
 101
 -1
 -1

#include <bits/stdc++.h>
using namespace std;
inline bool cmp(const pair<int, int> &a, const pair<int, int> &b) {
  if (a.second != b.second) {
    return a.second < b.second;
  }
  return a.first > b.first;
}
pair<int, int> car[(int)1e5 * 2];
int g[(int)1e5 * 2];
int dist[(int)1e5 * 2 + 1];
int n, k, s, t;
int check(int x) {
  int ans = 0;
  int res;
  for (int i = 0; i < k; ++i) {
    if (dist[i] > car[x].second) {
      return ((int)1e9);
    } else {
      res = min(dist[i], car[x].second - dist[i]);
      res += (dist[i] - res) * 2;
      ans += res;
    }
  }
  return ans;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> k >> s >> t;
  for (int i = 0; i < n; ++i) {
    cin >> car[i].first >> car[i].second;
  }
  sort(car, car + n, cmp);
  deque<pair<int, int> > c;
  for (int i = 0; i < n; ++i) {
    while (c.size() != 0) {
      auto tmp = c.back();
      c.pop_back();
      if (tmp.first < car[i].first) {
        c.push_back(tmp);
        break;
      }
    }
    c.push_back(car[i]);
  }
  n = 0;
  while (c.size() != 0) {
    auto tmp = c.front();
    c.pop_front();
    car[n] = tmp;
    ++n;
  }
  for (int i = 0; i < k; ++i) {
    cin >> g[i];
  }
  sort(g, g + k);
  int now = 0;
  for (int i = 0; i < k; ++i) {
    dist[i] = g[i] - now;
    now = g[i];
  }
  dist[k] = s - g[k - 1];
  ++k;
  sort(dist, dist + k);
  int l = -1, r = n - 1, mid;
  while (r - l > 1) {
    mid = (l + r) >> 1;
    if (check(mid) <= t) {
      r = mid;
    } else {
      l = mid;
    }
  }
  if (r == n - 1) {
    if (check(r) <= t) {
      cout << car[r].first;
    } else {
      cout << -1;
    }
  } else {
    cout << car[r].first;
  }
  return 0;
}
