#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <queue>
#include <cmath>
#include <cstdio>
using namespace std;
const int MAXN = 30005;
vector<pair<int, int>> adj[MAXN];
bool visited[MAXN];
int pos[MAXN];
int main() {
freopen("sate.in", "r", stdin);
freopen("sate.out", "w", stdout);
int n, m, x, y;
if (scanf("%d %d %d %d", &n, &m, &x, &y) != 4) return 0;
for (int k = 0; k < m; ++k) {
int i, j, d;
scanf("%d %d %d", &i, &j, &d);
adj[i].push_back({ j, d });
adj[j].push_back({ i, -d });
}
queue<int> q;
q.push(x);
visited[x] = true;
pos[x] = 0;
while (!q.empty()) {
int u = q.front();
q.pop();
if (u == y) {
break;
}
for (auto edge : adj[u]) {
int v = edge.first;
int weight = edge.second;
if (!visited[v]) {
visited[v] = true;
pos[v] = pos[u] + weight;
q.push(v);
}
}
}
printf("%d\n", abs(pos[y]));
return 0;
}