#include<iostream>
#include<vector>
#include<fstream>
#include<queue>
#include<cmath>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
vector<vector<pair<int, int>>> graf;
vector<int> bfs(int S, int n){
vector<int> dist(n+1, 0);
vector<bool> viz(n+1, false);
queue<int> q;
dist[S] = 0;
viz[S] = true;
q.push(S);
while(!q.empty()){
int x = q.front();
q.pop();
for(auto edge : graf[x]){
int i = edge.first;
int w = edge.second;
if(!viz[i]){
viz[i] = true;
dist[i] = dist[x] + w;
q.push(i);
}
}
}
return dist;
}
int main(){
int n, m, X, Y, u, v, d;
fin >> n >> m >> X >> Y;
graf.resize(n+1);
for(int i = 0; i < m; ++i){
fin >> u >> v >> d;
graf[u].push_back({v, d})
graf[v].push_back({u, -d});
}
vector<int> distante = bfs(X, n);
fout << abs(distante[Y]) << "\n";
fin.close();
fout.close();
return 0;
}