#include<cstdio>
#include<cstring>
#define N 30001
typedef struct nod
{int info,cost;
struct nod *next;}Nod;
bool c[N];
Nod *l[N],*t;
char r[23];
int i,n,m,x,y,j,p,u,k,s[N],q,e,o,v[4];
void A(int i,int j,int k)
{Nod *p=new Nod;
p->info=j,p->cost=k,p->next=l[i],l[i]=p;}
int B(int i,int j)
{for(Nod *p=l[i];p;p=p->next)
if(p->info==j)
return p->cost;
return 0;}
int main()
{FILE *f=fopen("sate.in","r"),*g=fopen("sate.out","w");
fgets(r,23,f);
q=strlen(r)-1;
for(i=0;i<q;i++)
if(r[i]>='0'&&r[i]<='9')
v[o]=v[o]*10+(r[i]-'0');
else
o++;
n=v[0],m=v[1],x=v[2],y=v[3];
while(m--)
{v[0]=v[1]=v[2]=0;
fgets(r,23,f);
q=strlen(r)-1,o=0;
for(e=0;e<q;e++)
if(r[e]>='0'&&r[e]<='9')
v[o]=v[o]*10+(r[e]-'0');
else
o++;
A(v[0],v[1],v[2]),A(v[1],v[0],-v[2]);}
s[u++]=x,c[x]=1;
while(p<u&&!c[y])
{j=s[p++];
for(t=l[j];t;t=t->next)
if(!c[t->info])
{c[t->info]=1,s[u++]=t->info;
if(j<x)
k=t->cost-B(j,x);
else
k=B(x,j)+t->cost;
if(t->info<x)
A(t->info,x,-k);
else
A(x,t->info,k);}}
fprintf(g,"%d",B(x,y));
return 0;}