#include <fstream>
#include <vector>
using namespace std;
ifstream in("sate.in");
ofstream out("sate.out");
int n, m, x, y;
vector <int> graph[30005], dist[30005];
bool viz[30005]; // vectorul viz pentru dfs
void dfs(int nod, int dis)
{
viz[nod] = true ;
if(nod == y)
{
out << max(dis, (-1)*dis) ;
}
for(int i=0; i<graph[nod].size(); i++)
if(viz[graph[nod][i]] == false)
{
if(graph[nod][i] > nod)
{
dfs(graph[nod][i], dis + dist[nod][i]) ;
}
else
{
dfs(graph[nod][i], dis - dist[nod][i]) ;
}
}
}
int main()
{
in >> n >> m >> x >> y ;
int u, v, d;
for(int i=1; i<=m; i++)
{
in >> u >> v >> d;
graph[u].push_back(v);
dist[u].push_back(d);
graph[v].push_back(u);
dist[v].push_back(d);
}
dfs(x, 0);
return 0;
}