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

def find(key):
  global c
  left = -1 
  right = n
  while right > left + 1: 
    middle = (left + right) // 2 
    if c[middle][1] >= key: 
      right = middle 
    else: 
      left = middle 
  return right
n, k, s, q = map(int, input().split())
c = [0 for i in range(n)]
t = [0 for i in range(k+1)]
for i in range(n):
  c[i] = [int(x) for x in input().split()]
z = [int(x) for x in input().split()]
z.append(s)
z.sort()
c.sort(key = lambda x: x[1])
a = t[0] = z[0]
for i in range(1, k+1):
  t[i] = z[i] - z[i-1]
  if t[i] > a:
    a = t[i]
#print(t)
b = 2*s - q
p = 0
#print(a)
for i in range(0, k+1):
  b -= min(a - t[i], t[i])
  #print(b)
  t[i] = max(0, 2*t[i] - a)
  if t[i] > 0:
    p += 1
t.sort()
#print(t, p)
j = 0
while t[j] == 0:
  j += 1
while b > 0 and p > 0:
  if b - t[j]*p >= 0:
    b -= t[j]*p
    a += t[j]
    p -= 1
    j += 1
    #print(b, a)
  else:
    a += b//p
    if b%p > 0:
      a += 1
    b = 0
    #print(a)
    
c.sort(key = lambda x: x[0])
if b > 0:
  print(-1)
else:
  f = find(a)
  if f == n:
    print(-1)
  else:
    m = c[f][0]
    for i in range(f+1, n):
      if c[i][0] < m:
        m = c[i][0]
    print(m)
  