#include<stdio.h>
#define N 360
struct nod{int inf;nod *urm;};
nod *p[N],*paux;
int n,m,s,d,i,xx,yy,cc,vv,ok,j,lheap,nc,nv,dc,dv,fd,cd,fm,fs,aux,
i8=2000000000,
cap[N][N],cost[N][N],flow[N][N],dad[N],heap[N],poz[N],val[N];
long long sol,lf,lc;
void readd(),bellman_ford(),flux(),djikstra();
int main()
{
readd();
bellman_ford();
flux();
return 0;
}
void readd()
{
freopen("fmcm.in","r",stdin);
freopen("fmcm.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&s,&d);
for(i=1;i<=m;i++)
{ scanf("%d%d%d%d",&xx,&yy,&cc,&vv);
paux=new nod;paux->inf=xx;paux->urm=p[yy];p[yy]=paux;
paux=new nod;paux->inf=yy;paux->urm=p[xx];p[xx]=paux;
cap[xx][yy]=cc;cost[xx][yy]=vv;cost[yy][xx]=-vv;
}
}
void bellman_ford()
{
for(i=1;i<=n;i++){val[i]=i8;dad[i]=0;}val[s]=0;
ok=1;
while(ok)
{ ok=0;
for(i=1;i<=n;i++)
{ if(val[i]==i8)continue;
for(paux=p[i];paux;paux=paux->urm)
{ j=paux->inf;
if(cap[i][j]-flow[i][j])
if(val[j]>val[i]+cost[i][j])
{ val[j]=val[i]+cost[i][j];
dad[j]=i;ok=1;
}
}
}
}
lc=val[d];
}
void flux()
{
djikstra();
printf("%lld\n",sol);
}
void djikstra()
{ for(;;)
{ for(i=1;i<=n;i++)
for(paux=p[i];paux;paux=paux->urm)
if(val[i]<i8&&val[paux->inf]<i8)
cost[i][paux->inf]+=val[i]-val[paux->inf];
for(i=1;i<=n;i++) { val[i]=i8;heap[i]=i;poz[i]=i;dad[i]=0;}
val[s]=0;lheap=n;heap[1]=s;heap[s]=1;poz[s]=1;poz[1]=s;
while(lheap>1&&val[heap[1]]<i8)
{ for(paux=p[heap[1]];paux;paux=paux->urm)
if(cap[heap[1]][paux->inf]-flow[heap[1]][paux->inf]>0)
if(val[heap[1]]+cost[heap[1]][paux->inf]<val[paux->inf])
{ val[paux->inf]=val[heap[1]]+cost[heap[1]][paux->inf];
dad[paux->inf]=heap[1];
for(j=poz[paux->inf];;)
{ if(j==1||val[heap[j]]>=val[heap[j>>1]])break;
aux=heap[j];heap[j]=heap[j>>1];heap[j>>1]=aux;
poz[heap[j]]=j;poz[heap[j>>1]]=j>>1;
}
}
heap[1]=heap[lheap];poz[heap[1]]=1;lheap--;
if(lheap)
for(j=1;;)
{ fs=j<<1;fd=fs+1;
if(fs>lheap)break;
if(fs<lheap)fs=(val[heap[fs]]<=val[heap[fd]])?fs:fd;
if(val[heap[j]]<=val[heap[fs]])break;
aux=heap[j];heap[j]=heap[fs];heap[fs]=aux;
poz[heap[j]]=j;poz[heap[fs]]=fs;j=fs;
}
}
if(val[d]==i8)return;
fd=i8;
for(i=d;dad[i];i=dad[i])
fd=(cap[dad[i]][i]-flow[dad[i]][i]<fd)?cap[dad[i]][i]-flow[dad[i]][i]:fd;
lc+=val[d];
sol+=lc*fd;
for(i=d;dad[i];i=dad[i]){flow[dad[i]][i]+=fd;flow[i][dad[i]]-=fd;}
}
}