#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;
int bfs(int S,int destination,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();
if(x==destination){
return abs(dist[x]);
}
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 abs(dist[destination]);
}
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});
}
fout<<bfs(X,Y,n)<<"\n";
fin.close();
fout.close();
return 0;
}