#include<cstdio>
#include<algorithm>
#include<queue>
#define N 352
#define inf 1000000
using namespace std;
struct nod{int info;nod*adr;}*v[N],*p;
int x,y,S,D,c,ct,i,n,m;
int cap[N][N],flux[N][N],cost[N][N],t[N],d[N];
queue<int>Q;
int bellman(int S,int D)
{int i,x,y,c;
for(i=1;i<=n;i++)
{
t[i]=0;
d[i]=inf;
}
d[S]=0;
Q.push(S);
while(!Q.empty())
{
x=Q.front();
p=v[x];
while(p)
{
y=p->info;
c=cost[x][y];
if( cap[x][y] > flux[x][y] && d[x]+c < d[y])
{
d[y]=d[x]+c;
t[y]=x;
Q.push(y);
}
p=p->adr;
}
Q.pop();
}
return t[D];
}
void ek(int S,int D)
{int minn,costmin=0,L[N],i;
while(bellman(S,D))
{
minn=inf;
for(i=D;i!=S;i=t[i])
minn=min(minn, cap[t[i]][i]-flux[t[i]][i]);
for(i=D;i!=S;i=t[i])
{
flux[t[i]][i]+=minn;
flux[i][t[i]]-=minn;
costmin += minn*cost[t[i]][i];
}
}
printf("%d\n",costmin);
}
int main()
{
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",&x,&y,&c,&ct);
cap[x][y]=c;
cost[x][y]=ct;
p=new nod;
p->info=y; p->adr=v[x]; v[x]=p;
}
ek(S,D);
return 0;
}