var f:text;
a,b:array[1..350,1..350] of longint;
n,m,i,q1,d,q,z,k,r,j,min,fluxmax,costmin,min1,s,finish:longint;
c,pre,v:array[1..12500] of integer;
ver:array[1..12500] of boolean;
function lala:boolean;
begin
fillchar(ver,sizeof(ver),false);
ver[s]:=true;
c[1]:=s;
pre[s]:=0;
z:=1;
k:=1;
while z<=k do
begin
for i:=1 to n do
begin
if (a[c[z],i]>0) and (ver[i]=false) then
begin
pre[i]:=c[z];
inc(k);
c[k]:=i;
ver[i]:=true;
end;
end;
inc(z);
end;
if ver[finish]=true then
lala:=true
else
lala:=false;
end;
begin
assign(f,'fmcm.in');
reset(f);
readln(f,n,m,s,finish);
for i:=1 to m do
begin
read(f,q1,d,q);
a[q1,d]:=q;
readln(f,b[q1,d]);
end;
close(f);
while lala do
begin
r:=n;
j:=0;
while r<>0 do
begin
inc(j);
v[j]:=r;
r:=pre[r];
end;
min:=maxlongint;
min1:=maxlongint;
for i:=j downto 2 do
if b[v[i],v[i-1]]<min1 then
begin
min1:=b[v[i],v[i-1]];
min:=a[v[i],v[i-1]];
end
else
if b[v[i],v[i-1]]=min1 then
if a[v[i],v[i-1]]<min then
min:=a[v[i],v[i-1]];
for i:=j downto 2 do
begin
a[v[i],v[i-1]]:=a[v[i],v[i-1]]-min;
a[v[i-1],v[i]]:=a[v[i-1],v[i]]+min;
end;
fluxmax:=fluxmax+min;
costmin:=costmin+min1;
end;
assign(f,'fmcm.out');
rewrite(f);
write(f,costmin);
close(f);
end.