#include <bits/stdc++.h>
using namespace std;
int n, k, s, t;
int gaz[200004];
pair<int, int> car[200004];
map<int, int> minCost;
int simul(int v) {
  int res = 0;
  int curPos = 0;
  for (int i = 0; i < k + 1; i++) {
    if (gaz[i] - curPos > v) return -1;
    int doub =
        (v - (gaz[i] - curPos) * 2 < 0) ? -1 * (v - (gaz[i] - curPos) * 2) : 0;
    res += doub * 2 + (gaz[i] - curPos) - doub;
    curPos = gaz[i];
  }
  return res;
}
int main() {
  cin >> n >> k >> s >> t;
  int c, v;
  for (int i = 0; i < n; i++) {
    cin >> c >> v;
    int mi = -1;
    if (minCost.count(v) != 0) mi = minCost[v];
    if (mi == -1)
      minCost.insert(make_pair(v, c));
    else if (mi > c) {
      minCost.at(v) = c;
    }
  }
  for (int i = 0; i < k; i++) {
    cin >> gaz[i];
  }
  int ci = 0;
  for (map<int, int>::iterator it = minCost.begin(); it != minCost.end(); it++)
    car[ci++] = make_pair((*it).first, (*it).second);
  sort(gaz, gaz + k);
  gaz[k] = s;
  int l = 0;
  int r = ci - 1;
  bool y = 0;
  while (l < r) {
    int m = (r + l) / 2;
    int val = simul(car[m].first);
    if (val <= t && val != -1) {
      y = 1;
      r = m;
    } else {
      l = m + 1;
    }
  }
  if (simul(car[l].first) != -1 && simul(car[l].first) <= t) y = 1;
  if (y) {
    int ans = car[l].second;
    for (int i = l + 1; i < ci; i++) {
      ans = (car[i].second < ans) ? car[i].second : ans;
    }
    cout << ans;
  } else
    cout << "-1";
  return 0;
}
