#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#define MAX 999999
using namespace std;
int temp[1010],map[1005][1005],minnum[1005];
bool flag[1005];
int t,n,m,p,q,a,b,c,i,j;
void Dijkstra();
int main()
{
scanf("%d",&t);
while(t--)
{
memset(map,MAX,sizeof(map));
memset(flag,0,sizeof(flag));
memset(minnum,0,sizeof(minnum));
scanf("%d%d%d%d",&n,&m,&p,&q);
minnum[q]=0;
for(i=0;i<n;i++)
scanf("%d",&temp[i]);
for(i=0;i<p;i++)
{
scanf("%d%d%d",&a,&b,&c);
map[a][b]=c;map[b][a]=c;
}
Dijkstra();
int min=MAX;
for(i=0;i<m;i++)
{
if(minnum[temp[i]]<min)
min=minnum[temp[i]];
}
printf("%d\n",min);
}
return 0;
}
void Dijkstra()
{
int min=MAX,l=0;
for(i=1;i<=m;i++)
{
if(!flag[i]&&min>minnum[i])
{
min=minnum[i];
l=i;
}
}
if(l==0)
return;
flag[l]=1;
for(i=1;i<=m;i++)
{
if(minnum[l]+map[l][i]<minnum[i]&&!flag[i])
minnum[i]=minnum[l]+map[l][i];
}
Dijkstra();
}