#include<bits/stdc++.h>
#define maxn 1005
using namespace std;
int n,m,s,t,f[maxn][maxn],dd[maxn],trc[maxn],c[maxn][maxn],res;
vector<int> e[maxn];
void findgraph()
{
queue<int> q;
while(!q.empty()) q.pop();
dd[s]=1;
q.push(s);
while(!q.empty())
{
int u=q.front();
q.pop();
for (int i=0;i<(int)e[u].size();i++)
{
int v=e[u][i];
if (dd[v]) continue;
if (f[u][v]>=c[u][v]) continue;
trc[v]=u;
dd[v]=1;;
if (v==t)
{
return;
}
q.push(v);
}
}
}
void incflow()
{
int tmp=1000000000;
int v=t;
while(v!=s)
{
int u=trc[v];
tmp=min(tmp,c[u][v]-f[u][v]);
v=u;
}
v=t;
while(v!=s)
{
int u=trc[v];
f[u][v]+=tmp;
f[v][u]-=tmp;
v=u;
}
res+=tmp;
}
int main()
{
//freopen("NKFLOW.inp","r",stdin);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m>>s>>t;
for (int i=1;i<=m;i++)
{
int u,v,val;
cin>>u>>v>>val;
c[u][v]=val;
e[u].push_back(v);
e[v].push_back(u);
}
while(1)
{
memset(dd,0,sizeof(dd));
memset(trc,0,sizeof(trc));
findgraph();
if (trc[t]==0) break;
incflow();
}
cout<<res;
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBtYXhuIDEwMDUKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IG4sbSxzLHQsZlttYXhuXVttYXhuXSxkZFttYXhuXSx0cmNbbWF4bl0sY1ttYXhuXVttYXhuXSxyZXM7CnZlY3RvcjxpbnQ+IGVbbWF4bl07CnZvaWQgZmluZGdyYXBoKCkKewogICAgcXVldWU8aW50PiBxOwogICAgd2hpbGUoIXEuZW1wdHkoKSkgcS5wb3AoKTsKICAgIGRkW3NdPTE7CiAgICBxLnB1c2gocyk7CiAgICB3aGlsZSghcS5lbXB0eSgpKQogICAgewogICAgICAgIGludCB1PXEuZnJvbnQoKTsKICAgICAgICBxLnBvcCgpOwogICAgICAgIGZvciAoaW50IGk9MDtpPChpbnQpZVt1XS5zaXplKCk7aSsrKQogICAgICAgIHsKICAgICAgICAgICAgaW50IHY9ZVt1XVtpXTsKICAgICAgICAgICAgaWYgKGRkW3ZdKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGZbdV1bdl0+PWNbdV1bdl0pIGNvbnRpbnVlOwogICAgICAgICAgICB0cmNbdl09dTsKICAgICAgICAgICAgZGRbdl09MTs7CiAgICAgICAgICAgIGlmICh2PT10KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcS5wdXNoKHYpOwogICAgICAgIH0KICAgIH0KfQp2b2lkIGluY2Zsb3coKQp7CiAgICBpbnQgdG1wPTEwMDAwMDAwMDA7CiAgICBpbnQgdj10OwogICAgd2hpbGUodiE9cykKICAgIHsKICAgICAgICBpbnQgdT10cmNbdl07CiAgICAgICAgdG1wPW1pbih0bXAsY1t1XVt2XS1mW3VdW3ZdKTsKICAgICAgICB2PXU7CiAgICB9CiAgICB2PXQ7CiAgICB3aGlsZSh2IT1zKQogICAgewogICAgICAgIGludCB1PXRyY1t2XTsKICAgICAgICBmW3VdW3ZdKz10bXA7CiAgICAgICAgZlt2XVt1XS09dG1wOwogICAgICAgIHY9dTsKICAgIH0KICAgIHJlcys9dG1wOwp9CmludCBtYWluKCkKewogICAgLy9mcmVvcGVuKCJOS0ZMT1cuaW5wIiwiciIsc3RkaW4pOwogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7CiAgICBjaW4+Pm4+Pm0+PnM+PnQ7CiAgICBmb3IgKGludCBpPTE7aTw9bTtpKyspCiAgICB7CiAgICAgICAgaW50IHUsdix2YWw7CiAgICAgICAgY2luPj51Pj52Pj52YWw7CiAgICAgICAgY1t1XVt2XT12YWw7CiAgICAgICAgZVt1XS5wdXNoX2JhY2sodik7CiAgICAgICAgZVt2XS5wdXNoX2JhY2sodSk7CiAgICB9CiAgICB3aGlsZSgxKQogICAgewogICAgICAgIG1lbXNldChkZCwwLHNpemVvZihkZCkpOwogICAgICAgIG1lbXNldCh0cmMsMCxzaXplb2YodHJjKSk7CiAgICAgICAgZmluZGdyYXBoKCk7CiAgICAgICAgaWYgKHRyY1t0XT09MCkgYnJlYWs7CiAgICAgICAgaW5jZmxvdygpOwogICAgfQogICAgY291dDw8cmVzOwogICAgcmV0dXJuIDA7Cn0K