/*
ÉèxÊÇa->b,b->cµÄ½»µã¿ÉÒÔ½«Â·¾¶a->b->cת»¯Îªa->x->b->x->c
¿É¼ûx-bÕâ¶Î·¾¶Éϵı߱»ËãÁËÁ½´Î£¬Ö»ÒªÃ¶¾Ùµãx£¬Çó×îС´ð°¸¼´¿É
*/
#include<bits/stdc++.h>
using namespace std;
#define N 400005
int p[N],n,m,a,b,c;
long long sum[N];
vector<int>G[N];
int cmp(int a,int b){return a>b;}
int vis[N],da[N],db[N],dc[N];
void dfs(int s,int d[]){
d[s]=0;
queue<int>q;
for(int i=1;i<=n;i++)vis[i]=0;
q.push(s);vis[s]=1;
while(q.size()){
int u=q.front();q.pop();
for(auto v:G[u])
if(!vis[v]){
d[v]=d[u]+1;
vis[v]=1;
q.push(v);
}
}
}
int main(){
int t;cin>>t;
while(t--){
cin>>n>>m>>a>>b>>c;
for(int i=1;i<=m;i++)scanf("%d",&p[i]);
for(int i=1;i<=m;i++){
int u,v;scanf("%d%d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
}
sort(p+1,p+1+m);
for(int i=1;i<=m;i++)sum[i]=sum[i-1]+p[i];
for(int i=m+1;i<=2*m;i++)sum[i]=0x3f3f3f3f;
dfs(a,da);dfs(b,db);dfs(c,dc);
long long ans=0x3f3f3f3f3f3f3f3f;
for(int i=1;i<=n;i++){
long long now=0;
now+=sum[db[i]];
if(da[i]+db[i]+dc[i]>m)continue;
now+=sum[da[i]+db[i]+dc[i]];
ans=min(ans,now);
}
cout<<ans<<'\n';
for(int i=1;i<=n;i++)G[i].clear();
}
}
/**
4 5 3 2 4
1 2 3 3
4 1
3 4
1 2
3 2
1 3
*/