#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAX = 2e6 + 5;
const int MOD = 1e9 + 7;
int n, m, u1, u2, v;
int dist1[MAX], dist2[MAX], dist3[MAX];
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
pair<int, int> start, fin;
vector<pair<int, int>> g[MAX], rev_g[MAX];
void DIJKSTRA(int start, int dist[], vector<pair<int, int>> g[MAX]) {
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
for(int i = 1; i <= n; i++) dist[i] = 2e18;
dist[start] = 0;
q.push({dist[start], start});
while(!q.empty()) {
int cost = q.top().first;
int u = q.top().second;
q.pop();
if(cost != dist[u]) continue;
for(auto e : g[u]) {
int v = e.first;
int w = e.second;
if(dist[v] > dist[u] + w) {
dist[v] = dist[u] + w;
q.push({dist[v], v});
}
}
}
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if(fopen("gay.inp", "r")) {
freopen("gay.inp", "r", stdin);
freopen("gay.out", "w", stdout);
}
cin >> n >> m >> u1 >> u2 >> v;
for(int i = 1; i <= m; i++) {
int u, v, w;
cin >> u >> v >> w;
g[u].push_back({v, w});
rev_g[v].push_back({u, w});
}
DIJKSTRA(u1, dist1, g);
DIJKSTRA(u2, dist2, g);
DIJKSTRA(v, dist3, rev_g);
int ans = 2e18;
for(int i = 1; i <= n; i++)
if(dist1[i] != 2e18 && dist2[i] != 2e18 && dist3[i] != 2e18)
ans = min(ans, dist1[i] + dist2[i] + dist3[i]);
if(ans == 2e18) cout << -1;
else cout << ans;
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBpbnQgbG9uZyBsb25nCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBNQVggPSAyZTYgKyA1Owpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsKaW50IG4sIG0sIHUxLCB1MiwgdjsKaW50IGRpc3QxW01BWF0sIGRpc3QyW01BWF0sIGRpc3QzW01BWF07CmludCBkeFtdID0gey0xLCAwLCAxLCAwfTsKaW50IGR5W10gPSB7MCwgMSwgMCwgLTF9OwpwYWlyPGludCwgaW50PiBzdGFydCwgZmluOwp2ZWN0b3I8cGFpcjxpbnQsIGludD4+IGdbTUFYXSwgcmV2X2dbTUFYXTsKdm9pZCBESUpLU1RSQShpbnQgc3RhcnQsIGludCBkaXN0W10sIHZlY3RvcjxwYWlyPGludCwgaW50Pj4gZ1tNQVhdKSB7CiAgICBwcmlvcml0eV9xdWV1ZTxwYWlyPGludCwgaW50PiwgdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiwgZ3JlYXRlcjxwYWlyPGludCwgaW50Pj4+IHE7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgZGlzdFtpXSA9IDJlMTg7CiAgICBkaXN0W3N0YXJ0XSA9IDA7CiAgICBxLnB1c2goe2Rpc3Rbc3RhcnRdLCBzdGFydH0pOwogICAgd2hpbGUoIXEuZW1wdHkoKSkgewogICAgICAgIGludCBjb3N0ID0gcS50b3AoKS5maXJzdDsKICAgICAgICBpbnQgdSA9IHEudG9wKCkuc2Vjb25kOwogICAgICAgIHEucG9wKCk7CiAgICAgICAgaWYoY29zdCAhPSBkaXN0W3VdKSBjb250aW51ZTsKICAgICAgICBmb3IoYXV0byBlIDogZ1t1XSkgewogICAgICAgICAgICBpbnQgdiA9IGUuZmlyc3Q7CiAgICAgICAgICAgIGludCB3ID0gZS5zZWNvbmQ7CiAgICAgICAgICAgIGlmKGRpc3Rbdl0gPiBkaXN0W3VdICsgdykgewogICAgICAgICAgICAgICAgZGlzdFt2XSA9IGRpc3RbdV0gKyB3OwogICAgICAgICAgICAgICAgcS5wdXNoKHtkaXN0W3ZdLCB2fSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0Kc2lnbmVkIG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZihmb3BlbigiZ2F5LmlucCIsICJyIikpIHsKICAgICAgICBmcmVvcGVuKCJnYXkuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbigiZ2F5Lm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KICAgIGNpbiA+PiBuID4+IG0gPj4gdTEgPj4gdTIgPj4gdjsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CiAgICAgICAgaW50IHUsIHYsIHc7CiAgICAgICAgY2luID4+IHUgPj4gdiA+PiB3OwogICAgICAgIGdbdV0ucHVzaF9iYWNrKHt2LCB3fSk7CiAgICAgICAgcmV2X2dbdl0ucHVzaF9iYWNrKHt1LCB3fSk7CiAgICB9CiAgICBESUpLU1RSQSh1MSwgZGlzdDEsIGcpOwogICAgRElKS1NUUkEodTIsIGRpc3QyLCBnKTsKICAgIERJSktTVFJBKHYsIGRpc3QzLCByZXZfZyk7CiAgICBpbnQgYW5zID0gMmUxODsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSAKICAgICAgICBpZihkaXN0MVtpXSAhPSAyZTE4ICAmJiBkaXN0MltpXSAhPSAyZTE4ICYmIGRpc3QzW2ldICE9IDJlMTgpCiAgICAgICAgICAgIGFucyA9IG1pbihhbnMsIGRpc3QxW2ldICsgZGlzdDJbaV0gKyBkaXN0M1tpXSk7CiAgICBpZihhbnMgPT0gMmUxOCkgY291dCA8PCAtMTsKICAgIGVsc2UgY291dCA8PCBhbnM7CiAgICByZXR1cm4gMDsKfQo=