#include #include #define inf 0x3fffffff#define N 1100int ma[N][N],dis[N],a[N];int m;void dijkstra(int start) {int visit[N],mi,f,i,j;memset(visit,0,sizeof(visit));for(i=1;i<=m;i++) dis[i]=ma[start][i];visit[start]=1;for(i=1;i dis[j]) { f=j; mi=dis[j]; } if(mi==inf) break; visit[f]=1; for(j=1;j<=m;j++) if(ma[f][j] dis[f]+ma[f][j]) dis[j]=dis[f]+ma[f][j]; }}return ;}int main() { int t,n,i,j,k,p,q; scanf("%d",&t); while(t--) { scanf("%d%d%d%d",&n,&m,&p,&q); for(i=1;i<=n;i++) scanf("%d",&a[i]); for(i=1;i<=m;i++) for(j=1;j<=m;j++) ma[i][j]=inf; while(p--) { scanf("%d%d%d",&i,&j,&k); if(ma[i][j]>k||ma[j][i]>k) ma[i][j]=ma[j][i]=k; } dijkstra(q); j=inf; for(i=1;i<=n;i++) if(j>dis[a[i]]) j=dis[a[i]]; printf("%d\n",j); }return 0;}