#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
constexpr int NMAX = 100001;
ifstream fin("sate.in");
ofstream fout("sate.out");
int N,M,X,Y;
vector<vector<pair<int,int>>>lista;
vector<int> pozitii;
void citire(){
fin>>N>>M>>X>>Y;
lista.resize(N+1);
pozitii.resize(N+1, -1);
auto cm = M;
while(cm){
int i, j, D;
fin>>i>>j>>D;
lista[i].push_back({j,D});
lista[j].push_back({i,D});
cm--;
}
}
void dfs(int numar) {
vector<int> stiva;
stiva.push_back(numar);
pozitii[numar]=0;
while (!stiva.empty()) {
auto nod_curent = stiva.back();
stiva.pop_back();
for (auto x : lista[nod_curent]) {
if (pozitii[x.first]==-1){
if (x.first < nod_curent )
pozitii[x.first]=pozitii[nod_curent]-x.second;
else
pozitii[x.first]=pozitii[nod_curent]+x.second;
stiva.push_back(x.first);
}
}
}
}
int main(){
citire();
dfs(X);
fout<<abs(pozitii[Y]);
return 0;
}