#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using P = pair<ll,ll>;
int main() {
	int n,m;
	cin>>n>>m;
	
		ll a, b , c;
	cin>>a>>b>>c;
	vector<vector<pair<ll,ll>>>G(n+1);
	for(int i = 0 ;i < m ;i++){
		ll u,v,w;
		cin>>u>>v>>w;
		G[u].push_back({v,w});
		G[v].push_back({u,w});
		
	}
	

	

		ll ans = 1e18;
	for(int src = 0 ; src<=n ;src++){
			priority_queue<P,vector<P>,greater<P>>pq;
	vector<ll>dist(n+1,1e18);
	dist[src]=0;
	pq.push({0,src});

	while(!pq.empty()){
		ll d,node;
		tie(d,node)=pq.top();
		pq.pop();
		
		if(dist[node]>d)continue;
		
		for(auto u : G[node]){
			ll neigh = u.first;
			ll w = u.second;
			
			if(dist[neigh]>dist[node]+w){
				dist[neigh]=dist[node]+w;
				pq.push({dist[neigh],neigh});
			}
		}
	}
	
	if(dist[a]<1e18 && dist[b]<1e18 && dist[c]<1e18 ){
		ans = min(ans,dist[a]+dist[b]+dist[c]);
	}
	}
	if(ans == 1e18)cout<<-1;
	else cout<<ans;
	return 0;
}