#include <iostream>
#include <fstream>
#include <map>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
const int MAXN =30005;
int distanta[MAXN];
bool vizitat[MAXN];
int main()
{
int n,m,x,y;
vector<pair<int, int>> graf[MAXN];
//n-sate
//m-drumuri cunoscute
//afla dist(x,y) -- daca se poate
fin>>n>>m>>x>>y;
int i,j,d;
while(m){
fin>>i>>j>>d;
graf[i].push_back({j, d});
graf[j].push_back({i,-d});
m--;
}
queue<int> q;
q.push(x);
vizitat[x] = true;
distanta[x] = 0;
while (!q.empty()){
int nod = q.front();
q.pop();
if (nod == y){
break;
}
for (const auto& muchie : graf[nod]){
int vecin = muchie.first;
int cost = muchie.second;
if (!vizitat[vecin]) {
vizitat[vecin] = true;
distanta[vecin] = distanta[nod] + cost;
q.push(vecin);
}
}
}
fout<< distanta[y];
return 0;
}