rt
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 2 * 1e5 + 10;
int h[N], e[N], idx, w[N], ne[N];
int pb, pa1, pa2;
int c, p;
int dist[N];
bool st[N];
typedef pair <int, int> PII;
void add(int a, int b, int k) {
e[idx] = b, w[idx] = k, ne[idx] = h[a], h[a] = idx ++;
}
void dijkstra(int root) {
memset(dist, 0x3f3f, sizeof(dist));
memset(st, 0, sizeof(st));
dist[root] = 0;
priority_queue <PII, vector <PII>, greater <PII> > heap;
heap.push({0, root});
while (heap.size()) {
auto t = heap.top();
heap.pop();
int dis = t.first, ver = t.second;
if(st[ver]) continue;
st[ver] = 1;
for (int i = h[ver]; i != -1; i = ne[i]) {
int j = e[i];
if(dist[j] > dis + w[i]) {
dist[j] = dis + w[i];
heap.push({dist[j], j});
}
}
}
}
int main (void) {
memset(h, -1, sizeof(h));
cin >> c >> p >> pb >> pa1 >> pa2;
for (int i = 1; i <= c; i ++) {
int a, b, k;
cin >> a >> b >> k;
add(a, b, k);
add(b, a, k);
}
dijkstra(pb);
int ans = min(dist[pa1], dist[pa2]);
dijkstra(pa1);
ans += dist[pa2];
cout << ans;
return 0;
}