#include <bits/stdc++.h>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
int N, M, Nst, Nend;
int distanta[30005];
vector<pair<int, int>> G[30005];
int BFS(int NodStart) {
queue<int> q;
distanta[NodStart] = 1;
q.push(NodStart);
while(!q.empty()) {
int Nod = q.front();
q.pop();
if(Nod == Nend) {
return distanta[Nod] - 1;
}
for(auto vecin : G[Nod]) {
if(!distanta[vecin.first]) {
distanta[vecin.first] = distanta[Nod] + (Nod > vecin.first ? -vecin.second : vecin.second);
q.push(vecin.first);
}
}
}
return -1;
}
int main()
{
fin >> N >> M >> Nst >> Nend;
for(int i = 0; i < M; ++i) {
int x, y, cost;
fin >> x >> y >> cost;
G[x].push_back({y, cost});
G[y].push_back({x, cost});
}
fout << BFS(Nst);
return 0;
}