import os
import sys
sys.setrecursionlimit(999999)
def get(x):
if x in fst_M:
return 0
if data[x] !=0:
return data[x]
a,b = ls0[x]
data[x] = max(get(a),get(b)) +max(N_time[a],N_time[b])
return data[x]
N,M,K,T = list(map(int, input().split()))
N_time = list(map(int, input().split()))
fst_M = list(map(int, input().split()))
ls0 = []
for i in range(K):
ls_K = list(map(int, input().split()))
ls0.append(ls_K[0:2])
N_time.insert(0,0)
ls0.insert(0,[0,0])
for j in fst_M:
ls0.insert(j,[0,0])
data = [0]*999999
print(get(T))
import os
import sys
N,M,K,T = list(map(int, input().split()))
N_time = list(map(int, input().split()))
fst_M = list(map(int, input().split()))
ls0 = []
for i in range(K):
ls_K = list(map(int, input().split()))
ls0.append(ls_K[0:2])
N_time.insert(0,0)
ls0.insert(0,[0,0])
for j in fst_M:
ls0.insert(j,[0,0])
d,d1={},{}
for j in range(1,N+1):
if j in fst_M:
d[j]=0
else:
a,b = ls0[j]
time = max(N_time[a],N_time[b]) +max(d.get(a,0),d.get(b,0))
d[j] = time
for j in range(1,N+1):
if j in fst_M:
d[j]=0
else:
a,b = ls0[j]
time = max(N_time[a],N_time[b]) +max(d.get(a,0),d.get(b,0))
d[j] = time
for j in range(1,N+1):
if j in fst_M:
d[j]=0
else:
a,b = ls0[j]
time = max(N_time[a],N_time[b]) +max(d.get(a,0),d.get(b,0))
d[j] = time
print(d[T])