#include<iostream>
#include<cstring>
#include<stdio.h>
using namespace std;
int m,n,k;
/*hdu1150 Machine Schedule
最小点覆盖=最大匹配数,把任务看做匹*/
int Link[202][202],vis[202],yM[202];
bool find_path(int u)//匈牙利算法
{
for(int v=1;v<=m+n;v++)
{
if(!vis[v]&&Link[u][v])
{
vis[v]=1;
if(yM[v]==-1||find_path(yM[v]))
{
yM[v]=u;
return true;
}
}
}
return false;
}
int hungary()//匈牙利算法
{
int ans=0;
for(int i=1;i<=n+m;i++)
{
memset(vis,0,sizeof(vis));
if(find_path(i))ans++;
}
return ans;
}
void init()
{
memset(Link,0,sizeof(Link));
memset(yM,-1,sizeof(yM));
}
int main()
{
int a,b,c;
while(cin>>n&&n)
{
init();
cin>>m>>k;
for(int i=0;i<k;i++)
{
scanf("%d%d%d",&c,&a,&b);
Link[a][b+n]=1;
}
cout<<hungary()<<endl;
}
}