#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
struct Muchie {
int vecin;
int cost;
};
vector<vector<Muchie>> adj;
vector<int> dist;
vector<bool> viz;
void dfs(int nod) {
viz[nod] = true;
for (auto& m : adj[nod]) {
if (!viz[m.vecin]) {
dist[m.vecin] = dist[nod] + m.cost;
dfs(m.vecin);
}
}
}
int main() {
int N, M, X, Y;
fin >> N >> M >> X >> Y;
adj.resize(N + 5);
dist.resize(N + 5, 0);
viz.resize(N + 5, false);
for (int i = 0; i < M; ++i) {
int u, v, d;
fin >> u >> v >> d;
if (u > v) {
swap(u, v);
}
adj[u].push_back({v, d});
adj[v].push_back({u, -d});
}
dfs(X);
fout << dist[Y] << "\n";
return 0;
}