#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
int n,m,x,y,i,j,d,viz[30001],dist[30001];
vector<pair<int,int>> graf[30001];
void bfs(int x) {
queue<int> q;
q.push(x);
viz[i] = 0;
dist[x] = 0;
while (!q.empty()) {
int nod = q.front();
q.pop();
for (auto vecin : graf[nod]) {
int urmator = vecin.first;
int d = vecin.second;
if (viz[urmator] == 0) {
viz[urmator] = 1;
if (urmator > nod) dist[urmator] = dist[nod] + d;
else dist[urmator] = dist[nod] - d;
q.push(urmator);
}
}
}
}
int main() {
fin >> n >> m >> x >> y;
for (int k = 1; k <= m; k++) {
fin >> i >> j >> d;
graf[i].push_back({j,d});
graf[j].push_back({i,d});
}
bfs(x);
fout << dist[y];
return 0;
}