#include <fstream>
#include <vector>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
int n, m, sat1, sat2;
vector<vector<pair<int, int>>> adiacent;
vector<bool> vizitat;
vector<int> distante;
void dfs(int x) {
vizitat[x] = true;
for (auto i : adiacent[x]) {
int vecin = i.first;
int cost = i.second;
if (!vizitat[vecin]) {
distante[vecin] = distante[x] + cost;
dfs(vecin);
}
}
}
int main() {
fin >> n >> m;
fin >> sat1 >> sat2;
adiacent.resize(n + 1);
distante.resize(n + 1);
distante[sat1] = 0;
vizitat.assign(n + 1, false);
for (int i = 1; i <= m; i++) {
int x, y, dist;
fin >> x >> y >> dist;
adiacent[x].push_back({y, dist});
adiacent[y].push_back({x, -dist});
}
dfs(sat1);
if (distante[sat2] > 0) fout << distante[sat2];
else fout << distante[sat2];
return 0;
}