#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
int map[1005][1005];
int dis[1005],vis[1005];
int m,n,k;
int fin(int t)
{
for(int i=1;i<=n;i++)
{
if(!vis[i] && map[t][i])
{
vis[i]=1;
if(dis[i]==-1 || fin(dis[i]))
{
dis[i]=t;
return 1;
}
}
}
return 0;
}
int main()
{
int a,b;
while(scanf("%d",&k)!=EOF && k!=0)
{
scanf("%d%d",&m,&n);
memset(map,0,sizeof(map));
while(k--)
{
scanf("%d%d",&a,&b);
map[a][b]=1;
}
int num=0;
memset(dis,-1,sizeof(dis));
for(int i=1;i<=m;i++)
{
memset(vis,0,sizeof(vis));
if(fin(i))
num++;
}
printf("%d\n",num);
}
return 0;
}
#include <stdio.h>
#include <cstring>
using namespace std;
int map[1005][1005];
int dis[1005],vis[1005];
int m,n,k;
int fin(int t)
{
for(int i=1;i<=n;i++)
{
if(!vis[i] && map[t][i])
{
vis[i]=1;
if(dis[i]==-1 || fin(dis[i]))
{
dis[i]=t;
return 1;
}
}
}
return 0;
}
int main()
{
int a,b;
while(scanf("%d",&k)!=EOF && k!=0)
{
scanf("%d%d",&m,&n);
memset(map,0,sizeof(map));
while(k--)
{
scanf("%d%d",&a,&b);
map[a][b]=1;
}
int num=0;
memset(dis,-1,sizeof(dis));
for(int i=1;i<=m;i++)
{
memset(vis,0,sizeof(vis));
if(fin(i))
num++;
}
printf("%d\n",num);
}
return 0;
}