#include<bits/stdc++.h>
using namespace std;
int N,M,K,T,Time[100],Begin[100],To[100][100][100],Total[100];
bool Have[100];
void dfs(int i,int j,int min){//深度优先搜索
for(int t=0;t<N;t++){
if(To[i][j][t]!=0&&!Have[t]){
Total[t]=min+To[i][j][t];//得到t种子的时间
}
if(min+To[i][j][t]>Total[t]){
Total[t]=min+To[i][j][t];//得到t种子的时间
}
dfs(i,t,Total[t]); dfs(j,t,Total[t]);
}
return;
}
int main()
{
cin>>N>>M>>K>>T;
for(int i=0;i<N;i++){
cin>>Time[i];//记录时间
}
for(int i=0;i<M;i++){
int t; cin>>t; Have[t]=true; Total[t]=0;
}
for(int i=0;i<K;i++){
int a,b,c;
cin>>a>>b>>c;//杂交方案
To[a][b][c]=To[b][a][c]=max(Time[a],Time[b]);
}
for(int i=0;i<N;i++){
for(int j=i+1;j<N;j++){
if(Have[i]&&Have[j]){
dfs(i,j,0);
}
}
}
cout<<Total[T];
return 0;
}