#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream cin("sate.in");
ofstream cout("sate.out");
vector<vector<pair<int,int>>> g;
queue<pair<int,int>> q;
vector<int> d;
void bfs(const int n) {
q.emplace(n,0);
d[n] = 0;
while(!q.empty()) {
pair<int,int> p = q.front();
q.pop();
for (const auto x : g[p.first]) {
if (d[x.first] == -1) {
d[x.first] = d[p.first] + x.second;
q.emplace(x.first,d[x.first]);
}
}
}
}
int main() {
int n,m,x,y;
cin >> n >> m >> x >> y;
g.resize(n+1);
d.resize(n+1, -1);
for (int i = 0; i < m; i++) {
int a,b,c;
cin >> a >> b >> c;
g[a].emplace_back(b,c);
g[b].emplace_back(a,-c);
}
bfs(x);
cout << d[y];
return 0;
}