#include<iostream>
#include<fstream>
using namespace std;
ifstream fi("sate.in");
ofstream fo("sate.out");
typedef
struct node
{
int date, dist;
node *next;
} *lista;
bool viz[30010], b=1;
int N, M, X, Y, i, j, k, l, x, y, d=2000000, dist;
lista Lda[30005], head, temp, tail;
void dfs(int z)
{
//fo << " 1 \n";
viz[z]=1;
for(lista head = Lda[z]; head; head=head->next)
if(!viz[head->date])
{
//fo << " 2 \n";
if(z < head->date) dist+=head->dist; else dist-=head->dist;
int w=dist;
if(head->date!=Y)
{
// fo << " 3 \n";
dfs(head->date);
dist=w;
}
else
{
// fo << " 4 \n";
if(d<dist)
d=dist;
}
}
}
void add(lista &head, int q, int w)
{
lista temp=new node;
temp->date=q;
temp->dist=w;
temp->next=head;
head=temp;
}
int main()
{
fi >> N >> M >> X >> Y;
for(i=1; i<=N; i++)
{
Lda[i]=NULL;
}
for(i=1; i<=M; i++)
{
fi >> x >> y >> d;
add(Lda[x],y,d);
add(Lda[y],x,d);
}
dfs(X);
fo << d;
}