#include<bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define pb push_back
#define PII pair<int,int >
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
const int N = 1e5+5;
int n,m;
int tim = 1e18;
int vb[6];
vector<PII> v[N];
int dist[6][N];
bool vis[N];
int ans[N];
map <int,int> mp;
void dijkstra(int idx,int A)
{
priority_queue<PII,vector<PII>,greater<PII> > q;
for(int i=1;i<=n;i++)
{
dist[idx][i] = 1e18;
vis[i] = 0;
}
dist[idx][A] = 0;
q.push({0,A});
while(q.size())
{
auto t = q.top();
int now = t.se;
q.pop();
if(vis[now]==1) continue;
vis[now] = 1;
for(auto tt:v[now])
{
int spot = tt.fi,w = tt.se;
if(dist[idx][spot]>dist[idx][now]+w)
{
dist[idx][spot] = dist[idx][now]+w;
q.push({dist[idx][spot],spot});
}
}
}
}
signed main()
{
IOS;
cin>>n>>m;
for(int i=1;i<=5;i++)
{
cin>>vb[i];
}
while(m--)
{
int x,y,t;
cin>>x>>y>>t;
v[x].pb({y,t});
v[y].pb({x,t});
}
vb[0] = 1;
sort(vb+1,vb+1+5);
for(int i=0;i<=5;i++)
{
dijkstra(i,vb[i]);
mp[vb[i]] = i;
}
int minn = 1e18;
do{
int sum = 0;
for(int i=0;i<=4;i++)
{
sum += dist[mp[vb[i]]][vb[i+1]];
}
minn = min(minn,sum);
}while(next_permutation(vb+1,vb+1+5));
cout<<minn;
}