#include<bits/stdc++.h>
#define int long long
#define rg register
#define il inline
#define gc() getchar()
using namespace std;
typedef pair<int,int> PII;
const int N=50010,M=100010;
int n,head[M<<1],idx,dist[N],m,ans=1e15+100,sum,res;
unordered_map<int,int> mp;
int arr[5];
bool vis[N];
struct Edge{
int v,w,nxt;
}e[M<<1];
struct Node{
int id,dis;
bool friend operator<(Node x,Node y){
return x.dis>y.dis;
}
};
priority_queue<Node> q;
void add(int u,int v,int w){
idx++;
e[idx].v=v,e[idx].w=w,e[idx].nxt=head[u];
head[u]=idx;
}
int dijkstra(int s,int t){
for(int i=1;i<=n;i++) dist[i]=1e15+100,vis[i]=false;
dist[s]=0,q.push({s,0});
while(q.size()){
Node u=q.top();q.pop();
if(vis[u.id]) continue;
vis[u.id]=true;
for(int i=head[u.id];i;i=e[i].nxt){
if(dist[e[i].v]>dist[u.id]+e[i].w){
dist[e[i].v]=dist[u.id]+e[i].w;
q.push({e[i].v,dist[e[i].v]});
}
}
}
return dist[t];
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr),cout.tie(nullptr);
cin>>n>>m;
for(int i=0;i<5;i++) cin>>arr[i];
sort(arr,arr+5);
for(int i=1;i<=m;i++){
int x,y,z;
cin>>x>>y>>z;
add(x,y,z),add(y,x,z);
}
for(int i=0;i<5;i++) mp[arr[i]]=dijkstra(1,arr[i]);
do{
res=mp[arr[0]];
for(int i=1;i<5;i++){
if(res>=ans) break;
res+=dijkstra(arr[i-1],arr[i]);
}
ans=min(ans,res);
}while(next_permutation(arr,arr+5));
cout<<ans<<'\n';
return 0;
}
/*
*/