#include <fstream>
#include<vector>
#include<queue>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
int n,m,x,y;
vector<vector<pair<int,int>>>adj;
vector<int>dist;
vector<int>viz;
void BFS(int source) {
queue<int> q;
q.push(source);
dist[source]=0;
viz[source]=1;
while(!q.empty()) {
int nod=q.front();
q.pop();
for(auto p:adj[nod])
{
int i = p.first;
int d = p.second;
if(viz[i]==0)
{
dist[i]=dist[nod]+d;
viz[i]=1;
q.push(i);
}
}
}
}
int main()
{
fin>>n>>m>>x>>y;
adj.resize(n+5);
dist.resize(n+5,-1);
viz.resize(n+5,0);
for(int i=1; i<=m;i++)
{
int a,b,d;
fin>>a>>b>>d;
adj[a].push_back({b,d});
adj[b].push_back({a,-d});
}
BFS(x);
int rez= dist[y];
fout<<rez;
return 0;
}