#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int n,m,e;//n+m个顶点 e条边
vector<int> g[N];
int vis[N];
int match[N];
int ans = 0;
int dfs(int u)//腾位置
{
int i;
for(auto v: g[u])
{
if(vis[v] == 0)//未被访问过的,如果已访问过的说明腾不出位置
{
vis[v] = 1;//访问
if(match[v] == 0 || dfs(match[v]))//为匹配的,或者能腾出位置
{
match[v] = u;
return 1;
}
}
}
return 0;
}
int main()
{
int i;
cin >> n >> m >> e;
for(i = 1; i<=e; i++)//存e条边
{
int u,v;
cin >> u>> v;
g[u].push_back(v);
}
for(i = 1; i<= n; i++)//左边n个顶点
{
memset(vis,0,sizeof(vis));//初始化
if(dfs(i))//找增广路
{
ans++;
}
}
cout << ans;
return 0;
}