#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
struct Drum
{
int lungime,cap;
Drum(int a,int b)
{
cap=a;
lungime=b;
}
};
void BFS(int start, const vector<vector<Drum>>& graf, vector<int>& pz)
{
vector<int> Q;
Q.push_back(start);
pz[start]=0;
int i=0;
while (i<Q.size())
{
int nod=Q[i];
++i;
for (auto d:graf[nod])
{
if (pz[d.cap]==-1)
{
pz[d.cap]=pz[nod]+d.lungime;
Q.push_back(d.cap);
}
}
}
}
int main()
{
int N,M,X,Y;
fin>>N>>M>>X>>Y;;
vector <vector<Drum>> graf(N+1);
vector<int> pz(N+1,-1);
for(int c=0;c<M;c++)
{
int i,j,l;
fin>>i>>j>>l;
graf[i].push_back(Drum(j, l));
graf[j].push_back(Drum(i, -l));
}
BFS(X, graf, pz);
fout<<pz[Y];
return 0;
}