#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
std::vector<std::vector<std::pair<int,int>>> graf;
std::vector<int> vizitat;
std::vector<int> dist;
void bfs(int start, int destinatie){
std::queue<int> q;
q.push(start);
vizitat[start]=1;
dist[start]=0;
while(!q.empty()){
int nod = q.front();
q.pop();
if(nod == destinatie)
return;
for(auto &p : graf[nod]){
int vecin = p.first;
int cost = p.second;
if(!vizitat[vecin]){
vizitat[vecin] = 1;
dist[vecin] = dist[nod] + cost;
q.push(vecin);
}
}}}
int main(){
int n, m, x, y;
std::ifstream fin("sate.in");
std::ofstream fout("sate.out");
if(!(fin>>n>>m>>x>>y))
return 0;
graf.resize(n+1);
vizitat.resize(n+1, 0);
dist.resize(n+1, 0);
for(int i = 0;i<m;i++){
int x, y, d;
fin >> x >> y>>d;
graf[x].push_back({y,d});
graf[y].push_back({x, -d});
}
bfs(x,y);
long long rez = dist[y];
if(rez < 0)
rez = -rez;
fout << rez << "\n";
return 0;
}