1 1 2 2
1000000000 1000000000
1
 1 1 1000000000 1000000000
100 1000000000
1
 1 1 10 18
5 6
5
 2 1 1000000000 2000000000
111 999999999
101 999999998
1
 4 13 400 600
13 30
1 19
1 160
1 113
58 73 15 319 194 362 128 157 336 162 77 90 96
 1 15 100 200
283 8
30 58 16 45 80 82 55 95 24 23 86 28 51 47 20
 3 2 300 400
24 68
13 65
15 113
127 177
 1 1 2 1
1 10
1
 4 2 7 15
10 9
4 4
9 3
4 10
1 6
 2 1 1000000000 2000000000
111 1000000000
101 1000000000
5
 2 1 1000000000 2000000000
111 999999998
101 999999998
1
 1 1 1000000000 1000000000
1 1000000000
1

1000000000
 -1
 5
 111
 1
 -1
 -1
 -1
 4
 101
 -1
 -1

#include <bits/stdc++.h>
long comp(long a[][2], long low, long high);
void sort(long a[][2], long start, long end);
int judge(long c, long sg[], long k, long s, long t);
int main(void) {
  long n, k, s, t, i, j;
  scanf("%ld %ld %ld %ld", &n, &k, &s, &t);
  long a[n][2], sg[k];
  for (i = 0; i < n; i++) scanf("%ld %ld", &a[i][0], &a[i][1]);
  for (i = 0; i < k; i++) scanf("%ld", &sg[i]);
  sort(a, 0, n - 1);
  for (i = 0; i < n; i++) {
    if (judge(a[i][1], sg, k, s, t)) {
      printf("%ld", a[i][0]);
      break;
    }
  }
  if (i == n) printf("-1");
  return 0;
}
long comp(long a[][2], long low, long high) {
  long key;
  key = a[low][0];
  while (low < high) {
    while (low < high && a[high][0] > key) high--;
    if (low < high) {
      a[low][0] = a[high][0];
      a[low++][1] = a[high][1];
    }
    while (low < high && a[low][0] < key) low++;
    if (low < high) {
      a[high][0] = a[low][0];
      a[high--][1] = a[low][1];
    }
  }
  a[low][0] = key;
  return low;
}
void sort(long a[][2], long start, long end) {
  long x;
  if (start < end) {
    x = comp(a, start, end);
    sort(a, start, x - 1);
    sort(a, x + 1, end);
  }
}
int judge(long c, long sg[], long k, long s, long t) {
  long i, j, d, at, nt;
  int flag = 1;
  for (i = 0; i < k && flag; i++) {
    s -= sg[i];
    at = c / 2;
    nt = c - 2 * at;
    while (sg[i] > at + nt && flag) {
      at--;
      if (at < 0) flag = 0;
      nt = c - 2 * at;
    }
    nt = sg[i] - at;
    if (nt < 0) nt = 0;
    t -= (at + 2 * nt);
    if (t < 0) flag = 0;
  }
  if (flag) {
    at = c / 2;
    nt = c - 2 * at;
    while (s > at + nt && flag) {
      at--;
      if (at < 0) flag = 0;
      nt = c - 2 * at;
    }
    nt = s - at;
    if (nt < 0) nt = 0;
    t = t - (at + 2 * nt);
    if (t < 0) flag = 0;
  }
  if (flag)
    return 1;
  else
    return 0;
}
