#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
int Find(int a[][501] , int n , int x ,int visit[] ,int result[])
{
for(int i = 1 ; i <= n ; i ++ )
{
if(a[x][i] == 1 && visit[i] == 0)
{
visit[i] = 1;
if(result[i] == -1 || Find(a , n , result[i] , visit , result))
{
result[i] = x;
return 1;
}
}
}
return 0 ;
}
int main()
{
int K , M , N ;
while(scanf("%d" , &K) != EOF && K)
{
scanf("%d%d" , &M , &N);
int a[501][501] ;
int visit[501];
int result[501];
memset(a , 0 , sizeof(a));
memset(result , -1 , sizeof(result));
for(int i = 0 ; i < K ; i ++ )
{
int t1 , t2;
scanf("%d%d" , &t1 , &t2);
a[t1][t2] = 1;
}
int sum = 0 ;
for(int i = 1 ; i <= M ; i ++ )
{
memset(visit , 0 , sizeof(visit));
sum += Find(a , N , i , visit ,result);
}
cout << sum << endl;
}
return 0;
}
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
int Find(int a[][501] , int n , int x ,int visit[] ,int result[])
{
for(int i = 1 ; i <= n ; i ++ )
{
if(a[x][i] == 1 && visit[i] == 0)
{
visit[i] = 1;
if(result[i] == -1 || Find(a , n , result[i] , visit , result))
{
result[i] = x;
return 1;
}
}
}
return 0 ;
}
int main()
{
int K , M , N ;
while(scanf("%d" , &K) != EOF && K)
{
scanf("%d%d" , &M , &N);
int a[501][501] ;
int visit[501];
int result[501];
memset(a , 0 , sizeof(a));
memset(result , -1 , sizeof(result));
for(int i = 0 ; i < K ; i ++ )
{
int t1 , t2;
scanf("%d%d" , &t1 , &t2);
a[t1][t2] = 1;
}
int sum = 0 ;
for(int i = 1 ; i <= M ; i ++ )
{
memset(visit , 0 , sizeof(visit));
sum += Find(a , N , i , visit ,result);
}
cout << sum << endl;
}
return 0;
}