// #include<bits/stdc++.h>
#include<iostream>
#include<queue>
using namespace std;
#define int long long
int n,m,s,t,a[5005][5005],dep[5005];
queue<int> q;
bool bfs(){
memset(dep,0,sizeof(dep));
dep[s] = 1;
q.push(s);
while(!q.empty()){
int u=q.front();
for(int i=1;i<=n;i++)
if(a[u][i]>0 && dep[i]==0){
dep[i] = dep[u]+1;
q.push(i);
}
q.pop();
}
return dep[t]!=0;
}
int dfs(int x,int flow){
if(x==t)
return flow;
for(int i=1;i<=n;i++)
if(a[x][i]>0 && dep[i]==dep[x]+1){
int d=dfs(i,min(flow,a[x][i]));
if(d>0){
a[x][i] -= d;
a[i][x] += d;
return d;
}
}
return 0;
}
int maxflow(){
int ans=0;
while(bfs()){
int x=1;
while(x!=0){
x = dfs(s,0x3f3f3f3f);
ans += x;
}
}
return ans;
}
signed main(){
cin>>n>>m;
s=1,t=m;
for(int i=1,x,y,z;i<=n;cin>>x>>y>>z,a[x][y]+=z,i++);
cout<<maxflow()<<endl;
return 0;
}