#include<iostream>
#include<utility>
#include<vector>
#include<fstream>
#include<queue>
using namespace std;
int main(){
ifstream f("sate.in");
ofstream g("sate.out");
int X,Y,N,M,d,nod;
f>>N>>M>>X>>Y;
vector<vector<pair<int,int>>> mat(N+1);
vector<bool> vizitat(N+1,false);
vector<int> dist(N+1,0);
for(int i=0;i<M;i++){
int a,b;
f>>a>>b>>d;
mat[a].push_back({b,d});
mat[b].push_back({a,-d});
}
queue<int> q;
q.push(X);
while(!q.empty()){
nod=q.front();
q.pop();
vizitat[nod]=true;
for(auto [a,b] : mat[nod]){
if(!vizitat[a]){
q.push(a);
dist[a]=dist[nod]+b;
}
}
}
g<<dist[Y];
f.close(); g.close();
return 0;
}