#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int M = 300;
int mmap[M][M];
int pre[M];
int vist[M];
int n, m;
int bfs() {
int v;
memset(vist, 0, sizeof(vist));
memset(pre, 0, sizeof(pre));
queue<int>s;
pre[1] = 0;
vist[1] = 1;
s.push(1);
bool flag = false;
while(!s.empty()) {
v = s.front();
s.pop();
for(int i = 1; i <= m; i++) {
if(mmap[v][i] > 0 && vist[i] == 0) {
pre[i] = v;
vist[i] = 1;
if(i == m) {
flag = true;
while(!s.empty()) s.pop();
break;
}
else
s.push(i);
}
}
}
if(!flag)
return 0;
v = m;
int minflow = 99999999;
while(pre[v]) {
minflow = min(minflow, mmap[pre[v]][v]);
v = pre[v];
}
v = m;
while(pre[v]) {
mmap[pre[v]][v] -= minflow;
mmap[v][pre[v]] += minflow;
v = pre[v];
}
return minflow;
}
int main()
{
int a, b, c;
while(scanf("%d%d", &n, &m) != EOF) {
memset(mmap, 0, sizeof(mmap));
for(int i = 0; i < n; i++) {
scanf("%d%d%d", &a, &b, &c);
mmap[a][b] += c;
}
int ans = 0;
int flow;
while(flow = bfs()) {
ans += flow;
}
printf("%d\n", ans);
}
return 0;
}