from collections import deque
def sate(lista,X,Y):
dist_X=[-1]*len(lista)
dist_X[X]=0
coada=deque([X])
vizitat=[False]*len(lista)
vizitat[X]=True
while coada:
nod=coada.popleft()
for vecin, d in lista[nod]:
if vizitat[vecin] is False:
vizitat[vecin] = True
dist_X[vecin]=dist_X[nod]+d
coada.append(vecin)
return abs(dist_X[Y])
with open("sate.in", "r") as f, open("sate.out", "w") as g:
N,M,X,Y=map(int, f.readline().strip().split())
lista=[[] for i in range(N+1)]
for _ in range(M):
i,j,D=map(int, f.readline().strip().split())
lista[i].append((j, D))
lista[j].append((i, -D))
g.write(str(sate(lista,X,Y))+"\n")