#include<bits/stdc++.h>
using namespace std;
#define l long long
const l N=5005;
l nxt[4*N],to[4*N],val[4*N],head[4*N],dep[N],cnt=1;
l now[4*N];
l n,m,s,t,inf=1145141919810;
void add(l u,l v,l w)
{
nxt[++cnt]=head[u];
head[u]=cnt;
to[cnt]=v;
val[cnt]=w;
}
bool bfs(l s,l t)
{
for(l i=1;i<=n;i++)
dep[i]=inf;
queue<l> q;
dep[s]=0;
now[s]=head[s];
q.push(s);
while(q.size())
{
l u=q.front();
q.pop();
for(l i=head[u];i;i=nxt[i])
if(dep[to[i]]==inf&&val[i]>0)
{
dep[to[i]]=dep[u]+1;
q.push(to[i]);
now[to[i]]=head[to[i]];
if(to[i]==t)
return true;
}
}
return false;
}
l dfs(l s,l limit)
{
if(s==t)
return limit;
l flow=0,x;
for(l i=head[s];i&&limit;i=nxt[i])
{
now[s]=i;
if(dep[to[i]]==dep[s]+1&&val[i]>0)
{
x=dfs(to[i],min(limit,val[i]));
if(x==0)
dep[to[i]]=inf;
limit-=x;
flow+=x;
val[i]-=x;
val[i^1]+=x;
}
}
return flow;
}
int main()
{
scanf("%lld%lld",&n,&m);
s=1,t=m;
memset(head,-1,sizeof(head));
for(l i=1;i<=n;i++)
{
l u,v,w;
scanf("%lld%lld%lld",&u,&v,&w);
add(u,v,w);
add(v,u,0);
}
l ans=0;
while(bfs(s,t))
{
ans+=dfs(s,inf);
}
printf("%lld",ans);
return 0;
}