#include <bitset>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
int main() {
int N, M, X, Y;
fin >> N >> M >> X >> Y;
vector<vector<pair<int, int>>> graf(N + 1);
for (int i = 0; i < M; ++i) {
int u, v, c;
fin >> u >> v >> c;
graf[u].emplace_back(v, c);
graf[v].emplace_back(u, -c);
}
vector<int> dist(N + 1, 0);
constexpr int NMAX = 30000;
bitset<NMAX> vizitat;
queue<int> q;
q.push(X);
vizitat[X] = true;
dist[X] = 0;
while (!q.empty()) {
int u = q.front();
q.pop();
if (u == Y) {
fout << dist[Y] << "\n";
break;
}
for (auto muchie : graf[u]) {
int v = muchie.first;
int cost = muchie.second;
if (!vizitat[v]) {
vizitat.set(v);
dist[v] = dist[u] + cost;
q.push(v);
}
}
}
fin.close();
fout.close();
return 0;
}