//二分图的最小顶点覆盖数=最大匹配数
//本题就是求最小顶点覆盖数的。
#include<stdio.h>
#include<string.h>
#define maxn 105
int n,m,k;
bool map[maxn][maxn],mark1[maxn];
int mark[maxn];
bool dfs(int v)
{
for(int i = 1; i <= m; i++)
{
if(mark1[i] || !map[v][i])
continue;
mark1[i] = true;
if(!mark[i] || dfs(mark[i]))
{
mark[i] = v;
return true;
}
}
return false;
}
int main()
{
int num,a,b;
while(scanf("%d",&n) != EOF,n)
{
scanf("%d%d",&m,&k);
memset(map,false,sizeof(map));
memset(mark,0,sizeof(mark));
for(int i = 0; i < k; i++)
{
scanf("%d%d%d",&num,&a,&b);
if(a&&b)//初始模式为0所以不需要重新启动
map[a][b] = true;
}
int cnt = 0;
for(i = 1; i <= n; i++)
{
memset(mark1,false,sizeof(mark1));
if(dfs(i))
cnt ++;
}
printf("%d\n",cnt);
}
return 0;
}