#include <bits/stdc++.h>
using namespace std;
vector<long long> g;
vector<pair<long long, long long> > car;
bool check(long long fuel, long long time) {
  long long i, ans = 0;
  for (i = 1; i < g.size(); i++) {
    long long dist = g[i] - g[i - 1];
    if (fuel < dist) return false;
    long long nor = max(0LL, 2 * dist - fuel);
    long long acc = dist - nor;
    ans += 2 * nor + acc;
  }
  if (ans <= time) return true;
  return false;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long i, j, n, t = 1, k = 0, cnt = 0, mini = LLONG_MAX, maxi = LLONG_MIN,
                     ans = 0;
  long long m;
  long long s;
  cin >> n >> k >> s >> t;
  for (i = 0; i < n; i++) {
    long long price, fuel;
    cin >> price >> fuel;
    car.push_back(make_pair(fuel, price));
  }
  g.push_back(0);
  for (i = 0; i < k; i++) {
    cin >> j;
    g.push_back(j);
  }
  sort(g.begin(), g.end());
  if (g.back() != s) g.push_back(s);
  sort(car.begin(), car.end());
  long long low = 0, high = INT_MAX, mid;
  while (high - low > 1) {
    mid = (high + low) / 2;
    if (check(mid, t))
      high = mid;
    else
      low = mid;
  }
  ans = 1000000007;
  for (i = 0; i < car.size(); i++)
    if (car[i].first >= low + 1) ans = min(ans, car[i].second);
  if (ans == 1000000007) return cout << -1, 0;
  return cout << ans, 0;
  return 0;
}
