#include <fstream>
#include <vector>
#include <climits>
#include <queue>
using namespace std;
ifstream cin("sate.in");
ofstream cout("sate.out");
int n, m, x, y;
vector<int>d;
vector<vector<pair<int,int>>>g;
void graph() {
cin>>n>>m>>x>>y;
d.resize(n+1,INT_MAX);
g.resize(n+1);
int i,j,cost;
for (int k=0;k<m;k++) {
cin>>i>>j>>cost;
g[i].push_back({j,cost});
g[j].push_back({i,cost});
}
}
void bfs() {
queue<int>q;
q.push(x);
d[x]=0;
while (!q.empty()) {
int nod = q.front();
q.pop();
for (auto v : g[nod]) {
int vnod=v.first, vcost=v.second;
//cout<<vnod<<'*';
if (d[vnod]==INT_MAX) {
if ( vnod > nod) //e in dreapta
d[vnod]=d[nod]+vcost;
else
d[vnod]=d[nod]-vcost;
q.push(vnod);
}
}
}
}
int main() {
graph();
bfs();
/**for (auto it: d)
cout<<it<<' ';*/
cout<<d[y];
return 0;
}