#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int MAXN = 30005;
vector<pair<int, int>> g[MAXN];
int viz[MAXN];
long long d[MAXN];
void dfs(int nod, long long dist_curenta) {
viz[nod] = 1;
d[nod] = dist_curenta;
for (size_t i = 0; i < g[nod].size(); ++i) {
int vecin = g[nod][i].first;
int dist = g[nod][i].second;
if (!viz[vecin]) {
dfs(vecin, dist_curenta + dist);
}
}
}
int main() {
ifstream fin("sate.in");
int n, m, x, y;
if (!(fin >> n >> m >> x >> y)) return 0;
for (int k = 0; k < m; ++k) {
int i, j, dist;
fin >> i >> j >> dist;
g[i].push_back({j, dist});
g[j].push_back({i, -dist});
}
fin.close();
dfs(x, 0);
ofstream fout("sate.out");
fout << d[y] << "\n";
fout.close();
return 0;
}