#include <bits/stdc++.h>
#define nmax 30005
using namespace std;
ifstream f("sate.in");
ofstream g("sate.out");
int n,m,x,y,l,r,w;
int dist[nmax];
bool viz[nmax];
vector<pair<int,int>> adj[nmax];
queue<int> q;
void bfs(int nod) {
q.push(nod);
viz[nod]=1;
while (q.size()) {
int nod=q.front();
q.pop();
for (int j=0;j<adj[nod].size();j++) {
int vecin=adj[nod][j].second;
int new_cost=adj[nod][j].first;
if (!viz[vecin]) {
dist[vecin]=dist[nod]+new_cost;
q.push(vecin);
viz[vecin]=1;
}
}
}
}
int main() {
f>>n>>m>>x>>y;
for (int i=1;i<=m;i++) {
f>>l>>r>>w;
adj[l].push_back({w,r});
adj[r].push_back({-w,l});
}
dist[x]=0;
bfs(x);
g<<dist[y];
return 0;
}