import java.util.Arrays;
import java.util.Scanner;
import java.math.*;
public class Main {
public int map[][] = new int[1010][1010];
public int match[] = new int[1010];
public int used[] = new int[1010];
public boolean find(int x,int n)
{
for(int i = 1;i <=n;i++)
{
if((used[i]==0) &&map[x][i]==1)
{
used[i] =1;
if(match[i]==-1||find(match[i],n))//如果i点没有匹配或i点可以匹配
{
match[i]= x;
return true;
}
}
}
return false;
}
public static void main(String[] args){
Scanner cin=new Scanner(System.in);
int k,m,n;
while(cin.hasNext()) {
k = cin.nextInt();
if(k == 0)
System.exit(0);
m = cin.nextInt();
n = cin.nextInt();
int cnt = 0;
Main lei =new Main();
Arrays.fill(lei.match, -1);
for(int i = 0;i<lei.map.length;i++)
{
for(int j = 0;j<lei.map.length;j++)
lei.map[i][j] =0;
}
for(int i = 1; i<= k;i++)
{
int a,b ;
a =cin.nextInt();
b = cin.nextInt();
lei.map[a][b] = 1;
}
for(int i = 1;i<=m;i++)
{
Arrays.fill(lei.used, 0);
if(lei.find(i,n))
cnt++;
}
System.out.println(cnt);
}
}
}
public int map[][] = new int[1010][1010]; //map[][]邻接矩阵,match[x1]=y1表示x1的部分图的匹配点是y1.used[i]表示是否被遍历