#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
vector<vector<pair<int, int>>> graph;
queue<pair<int, int>> q;
void read(int n, int m) {
graph.resize(n + 1);
for (int i = 0; i < m; i++) {
int x, y, d;
fin >> x >> y >> d;
graph[x].push_back({y, d});
graph[y].push_back({x, -d});
}
}
void bfs(int start, vector<int>& dist) {
q.push({start, 0});
dist[start] = 0;
while (!q.empty()) {
auto [node, d] = q.front();
q.pop();
for (auto [neighbor, distance] : graph[node]) {
if (dist[neighbor] == -1) {
dist[neighbor] = d + distance;
q.push({neighbor, dist[neighbor]});
}
}
}
}
int main(){
int n, m, x, y;
fin >> n >> m >> x >> y;
read(n, m);
vector<int> dist(n + 1, -1);
dist[x] = 0;
bfs(x, dist);
fout << dist[y] << "\n";
return 0;
}