#include <bits/stdc++.h>
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
int n, m, X, Y;
vector<pair<int,int>> a[30005];
long long d[30005];
bool viz[30005];
void bfs(int start)
{
queue<int> q;
q.push(start);
viz[start] = true;
d[start] = 0;
while (!q.empty())
{
int nod = q.front();
q.pop();
for (auto e : a[nod])
{
int vecin = e.first, cost = e.second;
if (!viz[vecin])
{
viz[vecin] = true;
d[vecin] = d[nod] + cost;
q.push(vecin);
}
}
}
}
int main()
{
f >> n >> m >> X >> Y;
for (int k = 1; k <= m; k++)
{
int i, j, D;
f >> i >> j >> D;
a[i].push_back({j, D});
a[j].push_back({i, -D});
}
bfs(X);
g << llabs(d[Y]) << "\n";
return 0;
}