#include <bits/stdc++.h>
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
const int NMAX = 30005;
int n, m, x, y, d, a, b;
vector<vector<pair<int, int>>> graph;
bitset<NMAX> used;
vector<int>dist;
void bfs(int node) {
queue<int>q;
q.push(node);
used[node] = 1;
dist[node] = 0;
while(!q.empty()) {
int current = q.front();
q.pop();
for(auto edge : graph[current]) {
int next = edge.first;
int distance = edge.second;
if(!used[next]) {
dist[next]=dist[current]+distance;
used[next] = 1;
q.push(next);
}
}
}
}
int main()
{
f>>n>>m>>x>>y;
dist.assign(n+1,0);
graph.assign(n+1,vector<pair<int, int>>());
for(int i=1; i<=m; i++)
{
f>>a>>b>>d;
graph[a].push_back({b, d});
graph[b].push_back({a, -d});
}
bfs(x);
g << abs(dist[y]) << '\n';
return 0;
}