type sate=record
i,j,d:longint;
end;
type vector=record
i,d:longint;
end;
var a:array[1..100] of sate;
v:array[1..100] of vector;
q:array[1..100] of longint;
b,c:array[0..50,0..50] of longint;
i,j,k,n,m,x,y,p,u,max:longint;
f,g:text;
begin
assign(f,'sate.in');reset(f);
assign(g,'sate.out');rewrite(g);
readln(f,n,m,x,y);max:=0;
for i:=1 to m do
begin
readln(f,a[i].i,a[i].j,a[i].d);
b[0,a[i].i]:=b[0,a[i].i]+1;
b[0,a[i].j]:=b[0,a[i].j]+1;
b[b[0,a[i].i],a[i].i]:=a[i].j;
b[b[0,a[i].j],a[i].j]:=a[i].i;
c[0,a[i].i]:=c[0,a[i].i]+1;
c[0,a[i].j]:=c[0,a[i].j]+1;
c[c[0,a[i].i],a[i].i]:=a[i].d;
c[b[0,a[i].j],a[i].j]:=a[i].d;
if a[i].d>max then max:=a[i].d;
end;
p:=1;u:=0;q[x]:=1;
for i:=1 to b[0,x] do
begin
u:=u+1;
v[i].i:=b[u,x];
if b[u,x]>x then v[i].d:=c[i,x] else v[i].d:=-c[i,x];
end;
while p<=u do
begin
for i:=1 to b[0,v[p].i] do
begin
if q[b[i,v[p].i]]=0 then
begin
u:=u+1;
v[u].i:=b[i,v[p].i];
if v[u].i>v[p].i then v[u].d:=v[p].d+c[i,v[p].i]
else v[u].d:=v[p].d-c[i,v[p].i];
if v[u].d>max then max:=v[u].d;
end;
end;
q[v[p].i]:=1;
p:=p+1;
end;
if q[y]=0 then max:=0;
writeln(g,max);
close(f);close(g);
end.