#include <bits/stdc++.h>
using namespace std;
const int N = 200000;
int k1[N];
struct Car {
  int price;
  int capacity;
};
bool cmp(const Car a, const Car b) { return a.capacity < b.capacity; }
bool cmp1(const Car a, const Car b) { return a.price < b.price; }
int can(int a, int k, int t) {
  int i, s, flag = 0, num = 0;
  for (i = 0; i <= k; i++) {
    s = k1[i + 1] - k1[i];
    if (a < s) {
      flag = 1;
      break;
    }
    if (a >= 2 * s)
      num += s;
    else
      num += (3 * s - a);
  }
  if (flag == 1 || num > t) return 0;
  return 1;
}
Car car[N];
int main() {
  int n, k, s, t, i;
  scanf("%d%d%d%d", &n, &k, &s, &t);
  for (i = 0; i < n; i++) {
    scanf("%d%d", &car[i].price, &car[i].capacity);
  }
  for (i = 1; i <= k; i++) {
    scanf("%d", &k1[i]);
  }
  k1[k + 1] = s;
  k1[0] = 0;
  sort(car, car + n, cmp);
  sort(k1 + 1, k1 + k + 1);
  int l = 0, r = n - 1, mid;
  while (l < r) {
    mid = (l + r) / 2;
    if (can(car[mid].capacity, k, t))
      r = mid;
    else
      l = mid + 1;
  }
  if (can(car[l].capacity, k, t)) {
    sort(car + l, car + n, cmp1);
    printf("%d\n", car[l].price);
  } else
    printf("-1\n");
  return 0;
}
