#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
int n, k, s;
long long t;
vector<pair<int, int> > cars;
vector<int> oils(k);
bool check(pair<int, int> car) {
  int prev = 0;
  long long curtime = 0, cs, x, y, sl;
  for (int &oil : oils) {
    sl = oil - prev;
    if (sl > car.second) return false;
    if (2 * sl > car.second) {
      y = car.second * 2 - sl * 2;
      x = (sl * 2 - y) * 2;
      curtime += x + y;
    } else {
      curtime += sl * 2;
    }
    prev = oil;
  }
  return curtime <= t;
}
bool comp(pair<int, int> l, pair<int, int> r) { return !check(l); }
int main() {
  cin >> n >> k >> s >> t;
  t *= 2;
  vector<pair<int, int> > b(n);
  for (int i = 0; i < n; i++) {
    scanf("%d %d", &b[i].first, &b[i].second);
  }
  sort(b.begin(), b.end());
  int prev = INT_MIN;
  for (int i = 0; i < n; i++) {
    if (b[i].second > prev) {
      prev = b[i].second;
      cars.push_back(b[i]);
    }
  }
  oils.resize(k);
  for (int &i : oils) {
    scanf("%d", &i);
  }
  sort(oils.begin(), oils.end());
  oils.push_back(s);
  n = cars.size();
  vector<pair<int, int> >::iterator res =
      lower_bound(cars.begin(), cars.end(), make_pair(1, 1), comp);
  int l = (int)(res - cars.begin());
  if (res == cars.end())
    cout << -1;
  else
    cout << cars[l].first;
  return 0;
}
