#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
struct Muchie {
int destinatie;
int distanta;
};
const int MAXN = 30001;
vector<Muchie> graf[MAXN];
int pos[MAXN];
bool vizitat[MAXN];
int main() {
ifstream fin("sate.in");
ofstream fout("sate.out");
int N, M, X, Y;
fin >> N >> M >> X >> Y;
for (int k = 0; k < M; ++k) {
int i, j, D;
fin >> i >> j >> D;
graf[i].push_back({j, D});
graf[j].push_back({i, -D});
}
queue<int> Q;
Q.push(X);
vizitat[X] = true;
pos[X] = 0;
while (!Q.empty()) {
int nod = Q.front();
Q.pop();
if (nod == Y) {
break;
}
for (const auto& vecin : graf[nod]) {
int urm = vecin.destinatie;
int cost = vecin.distanta;
if (!vizitat[urm]) {
vizitat[urm] = true;
pos[urm] = pos[nod] + cost;
Q.push(urm);
}
}
}
fout << abs(pos[Y] - pos[X]) << "\n";
fin.close();
fout.close();
return 0;
}