#include<fstream>
#include<vector>
#include<queue>
using namespace std;
struct Muchie {
int vecin;
int cost;
};
int main() {
ifstream fin("sate.in");
ofstream fout("sate.out");
int n, m, x, y;
fin >> n >> m >> x >> y;
vector<vector<Muchie>> vecini(n + 1);
for (int k = 0; k < m; k++) {
int i, j, d;
fin >> i >> j >> d;
vecini[i].push_back({j, d});
vecini[j].push_back({i, -d});
}
vector<int> poz(n + 1, 0);
vector<bool> vizitat(n + 1, false);
queue<int> coada;
vizitat[x] = true;
poz[x] = 0;
coada.push(x);
while (!coada.empty()) {
int sat = coada.front();
coada.pop();
for (Muchie mu : vecini[sat]) {
if (!vizitat[mu.vecin]) {
vizitat[mu.vecin] = true;
poz[mu.vecin] = poz[sat] + mu.cost;
coada.push(mu.vecin);
}
}
}
int raspuns = poz[y];
if (raspuns < 0) {
raspuns = -raspuns;
}
fout << raspuns << "\n";
return 0;
}