#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;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwp1c2luZyBQID0gcGFpcjxsbCxsbD47CmludCBtYWluKCkgewoJaW50IG4sbTsKCWNpbj4+bj4+bTsKCQoJCWxsIGEsIGIgLCBjOwoJY2luPj5hPj5iPj5jOwoJdmVjdG9yPHZlY3RvcjxwYWlyPGxsLGxsPj4+RyhuKzEpOwoJZm9yKGludCBpID0gMCA7aSA8IG0gO2krKyl7CgkJbGwgdSx2LHc7CgkJY2luPj51Pj52Pj53OwoJCUdbdV0ucHVzaF9iYWNrKHt2LHd9KTsKCQlHW3ZdLnB1c2hfYmFjayh7dSx3fSk7CgkJCgl9CgkKCgkKCgkJbGwgYW5zID0gMWUxODsKCWZvcihpbnQgc3JjID0gMCA7IHNyYzw9biA7c3JjKyspewoJCQlwcmlvcml0eV9xdWV1ZTxQLHZlY3RvcjxQPixncmVhdGVyPFA+PnBxOwoJdmVjdG9yPGxsPmRpc3QobisxLDFlMTgpOwoJZGlzdFtzcmNdPTA7CglwcS5wdXNoKHswLHNyY30pOwoKCXdoaWxlKCFwcS5lbXB0eSgpKXsKCQlsbCBkLG5vZGU7CgkJdGllKGQsbm9kZSk9cHEudG9wKCk7CgkJcHEucG9wKCk7CgkJCgkJaWYoZGlzdFtub2RlXT5kKWNvbnRpbnVlOwoJCQoJCWZvcihhdXRvIHUgOiBHW25vZGVdKXsKCQkJbGwgbmVpZ2ggPSB1LmZpcnN0OwoJCQlsbCB3ID0gdS5zZWNvbmQ7CgkJCQoJCQlpZihkaXN0W25laWdoXT5kaXN0W25vZGVdK3cpewoJCQkJZGlzdFtuZWlnaF09ZGlzdFtub2RlXSt3OwoJCQkJcHEucHVzaCh7ZGlzdFtuZWlnaF0sbmVpZ2h9KTsKCQkJfQoJCX0KCX0KCQoJaWYoZGlzdFthXTwxZTE4ICYmIGRpc3RbYl08MWUxOCAmJiBkaXN0W2NdPDFlMTggKXsKCQlhbnMgPSBtaW4oYW5zLGRpc3RbYV0rZGlzdFtiXStkaXN0W2NdKTsKCX0KCX0KCWlmKGFucyA9PSAxZTE4KWNvdXQ8PC0xOwoJZWxzZSBjb3V0PDxhbnM7CglyZXR1cm4gMDsKfQ==