#include <bits/stdc++.h>
using namespace std;
long long no_cars, no_gas, road, Time;
pair<long long, long long> cars[200005];
long long gas_st[200005];
bool check(long long car) {
  long long i, j;
  long long fuel = cars[car].first;
  long long time_taken = 0;
  long long prev = 0;
  for (i = 0; i <= no_gas + 1; i++) {
    long long now = gas_st[i];
    if (fuel < (now - prev)) return 0;
    long long extra = fuel - (now - prev);
    time_taken += (min(now - prev, extra)) +
                  (2 * ((now - prev) - min(now - prev, extra)));
    prev = now;
  }
  if (time_taken <= Time)
    return 1;
  else
    return 0;
}
int main() {
  long long i, j;
  scanf("%lld%lld%lld%lld", &no_cars, &no_gas, &road, &Time);
  for (i = 0; i < no_cars; i++) {
    long long cost, fuel;
    scanf("%lld%lld", &cost, &fuel);
    cars[i].first = fuel;
    cars[i].second = cost;
  }
  for (i = 0; i < no_gas; i++) scanf("%lld", &gas_st[i]);
  gas_st[no_gas] = road;
  gas_st[no_gas + 1] = 0;
  sort(cars, cars + no_cars);
  sort(gas_st, gas_st + (no_gas + 2));
  long long ans = -1;
  long long L = 0, R = no_cars - 1;
  while (L <= R) {
    long long mid = L + (R - L) / 2;
    bool val = check(mid);
    if (val) {
      ans = mid;
      R = mid - 1;
    } else
      L = mid + 1;
  }
  if (ans == -1)
    printf("-1\n");
  else {
    long long temp = (1 << 30);
    for (i = ans; i < no_cars; i++) temp = min(temp, cars[i].second);
    printf("%lld\n", temp);
  }
  return 0;
}
