#include <fstream>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
struct Muchie {
int destinatie;
int distanta;
};
const int MAXN = 30005;
vector<Muchie> graf[MAXN];
int pozitie[MAXN];
bool vizitat[MAXN];
void bfs(int start) {
queue<int> q;
q.push(start);
vizitat[start] = true;
pozitie[start] = 0;
while (!q.empty()) {
int nod = q.front();
q.pop();
for (const auto& vec : graf[nod]) {
if (!vizitat[vec.destinatie]) {
vizitat[vec.destinatie] = true;
pozitie[vec.destinatie] = pozitie[nod] + vec.distanta;
q.push(vec.destinatie);
}
}
}
}
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});
}
bfs(X);
fout << abs(pozitie[Y] - pozitie[X]) << "\n";
return 0;
}