#include <cstdio>
#include <cstdlib>
const int MAXN = 30005;
const int MAXM = 100030;
int head[MAXN], nxt[2 * MAXM], to[2 * MAXM], w[2 * MAXM], cnt;
int q[MAXN], dist_X[MAXN];
bool vizitat[MAXN];
int main() {
freopen("sate.in", "r", stdin);
freopen("sate.out", "w", stdout);
int N, M, X, Y;
scanf("%d %d %d %d", &N, &M, &X, &Y);
for (int i = 1; i <= N; i++) {
head[i] = -1;
dist_X[i] = -1;
}
for (int k = 0; k < M; k++) {
int i, j, D;
scanf("%d %d %d", &i, &j, &D);
to[cnt] = j; w[cnt] = D; nxt[cnt] = head[i]; head[i] = cnt++; // lista[i].append((j, D))
to[cnt] = i; w[cnt] = -D; nxt[cnt] = head[j]; head[j] = cnt++; // lista[j].append((i, -D))
}
dist_X[X] = 0;
vizitat[X] = true;
int h = 0, t = 0;
q[t++] = X;
while (h < t) {
int nod = q[h++];
for (int e = head[nod]; e != -1; e = nxt[e]) {
int vecin = to[e], d = w[e];
if (!vizitat[vecin]) {
vizitat[vecin] = true;
dist_X[vecin] = dist_X[nod] + d;
q[t++] = vecin;
}
}
}
printf("%d\n", abs(dist_X[Y]));
return 0;
}