#include <iostream>
#include <string.h>
using namespace std;
#include <queue>
#define min(x,y) (x<y?x:y)
const int inf = 1000000000;
const int maxn = 210;
int cap[maxn][maxn];
int n,m;
int s,t;
int flow[maxn][maxn],d[maxn],parent[maxn],maxflow;
void Edmonds_Karp(int s,int t,int nnum)
{
maxflow = 0;
memset(flow,0,sizeof(flow));
memset(parent,0,sizeof(parent));
while(true)
{
memset(d,0,sizeof(d));
queue<int>que;
d[s]=inf;
que.push(s);
while(!que.empty()) //BFS寻找增广路
{
int u = que.front();
que.pop();
for(int v=0; v<nnum; ++v)
{
if(!d[v] && cap[u][v]>flow[u][v]) //找到新结点v
{
parent[v] = u; //记录v的父亲,并参加FIFO队列
que.push(v);
d[v] = min(d[u],cap[u][v]-flow[u][v]); //s-v路径上的最小残量
}
}
}
if(0==d[t]) //找不到,则当前流已经是最大流
break;
for(int u=t;u!=s;u=parent[u]) //从汇点往回走
{
flow[parent[u]][u]+=d[t]; //更新正向流
flow[u][parent[u]]-=d[t]; //更新反向流
}
maxflow += d[t]; //更新从s流出的总流量
}
}
int main()
{
while(cin>>n>>m)
{
memset(cap,0,sizeof(cap));
while(n--)
{
int temps,tempe,c;
cin>>temps>>tempe>>c;
cap[temps-1][tempe-1]+=c; //处理惩罚重边
}
Edmonds_Karp(0,m-1,m);
cout<<maxflow<<endl;
}
return 0;
}