#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin ("sate.in");
ofstream fout("sate.out");
int main(){
int N, M, X, Y;
fin >> N >> M >> X >> Y;
vector < vector < pair <int, int> > > muchii(N + 1);
for (int i = 0; i < M; i++){
int x, y, d;
fin >> x >> y >> d;
muchii[x].push_back({y, d});
muchii[y].push_back({x, -d});
}
vector <int> distanta(N + 1, 0);
vector <bool> vizitat(N + 1, false);
queue <int> coada;
coada.push(X);
vizitat[X] = true;
while (!coada.empty() && !vizitat[Y]){
int nod = coada.front();
coada.pop();
for (auto muchie : muchii[nod]){
int vecin = muchie.first;
if (!vizitat[vecin]){
vizitat[vecin] = true;
distanta[vecin] = distanta[nod] + muchie.second;
coada.push(vecin);
}
}
}
int rezultat = distanta[Y];
if (rezultat < 0){
rezultat = -rezultat;
}
fout << rezultat << "\n";
return 0;
}