#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
struct Muchie
{
int destinatie;
int distanta;
};
int main()
{
int n,m,x,y;
f>>n>>m>>x>>y;
vector<vector<Muchie>> graf (n + 1);
for(int k =1 ; k<=m ; k++)
{
int i,j,d;
f>>i>>j>>d;
graf[i].push_back({j,d});
graf[j].push_back({i,-d});
}
const long long INF = 1e18;
vector<long long> dist (n+1, INF);
queue<int> q;
q.push(x);
dist[x] = 0;
while (!q.empty())
{
int nod = q.front();
q.pop();
if (nod == y) {
break;
}
for (const auto& vecin : graf[nod]) {
if (dist[vecin.destinatie] == INF) {
dist[vecin.destinatie] = dist[nod] + vecin.distanta;
q.push(vecin.destinatie);
}
}
}
g << abs(dist[y]) << "\n";
return 0;
}