#include <bits/stdc++.h>
using namespace std;
ifstream fin("fmcm.in");
ofstream fout("fmcm.out");
int n,m,S,D,c[355][355],cost[355][355],dist[355],from[355],Q[1000005],use[1000005];
vector<int> muchii[355];
bool drum=0;
int INF=1e9;
int BellmanFord()
{
int L=0;
for(int i=1;i<=n;i++)
{
dist[i]=INF;
use[i]=0;
from[i]=0;
}
dist[S]=0;
use[S]=1;
Q[++L]=S;
for(int i=1;i<=L;i++)
{
int nod=Q[i];
for(auto j:muchii[nod])
if(c[nod][j]>0&&dist[j]>dist[nod]+cost[nod][j])
{
dist[j]=dist[nod]+cost[nod][j];
from[j]=nod;
if(!use[j])
{
Q[++L]=j;
use[j]=1;
}
}
use[nod]=0;
}
if(dist[D]==INF)
return 0;
drum=1;
int cap=INF;
for(int nod=D;nod!=S;nod=from[nod])
cap=min(cap,c[from[nod]][nod]);
for(int nod=D;nod!=S;nod=from[nod])
{
c[from[nod]][nod]-=cap;
c[nod][from[nod]]+=cap;
}
return dist[D]*cap;
}
int flux()
{
int rez=0;
drum=1;
while(drum)
{
drum=0;
rez+=BellmanFord();
}
return rez;
}
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(0);
fout.tie(0);
fin>>n>>m>>S>>D;
for(int i=1;i<=m;i++)
{
int a,b;
fin>>a>>b;
muchii[a].push_back(b);
muchii[b].push_back(a);
fin>>c[a][b]>>cost[a][b];
cost[b][a]=-cost[a][b];
}
fout<<flux();
return 0;
}