#include <bits/stdc++.h>
std::ifstream fin("sate.in");
std::ofstream fout("sate.out");
std::bitset<100001> visited;
std::vector<std::vector<std::pair<int, int>>> graph;
std::vector<int> dist;
int main() {
int n, m, x, y;
fin>>n>>m>>x>>y;
graph.resize(n+1);
dist.resize(n+1);
for (int i=1; i<=m; i++) {
int a,b,d;
fin>>a>>b>>d;
graph[a].push_back({b,d});
graph[b].push_back({a, -d});
}
std::queue<int> q;
q.push(x);
visited[x] = true;
dist[x] = 0;
while (!q.empty()) {
int node = q.front();
q.pop();
for (std::pair<int, int> next: graph[node]) {
int v = next.first;
int cost = next.second;
if (!visited[v]) {
visited[v]= true;
dist[v] = dist[node] + cost;
q.push(v);
}
}
}
fout<<dist[y]<<"\n";
return 0;
}