#include <bits/stdc++.h>
using namespace std;
const int maxn=2000;
int match[maxn],match1[maxn],a[maxn][maxn],m,n,vis[maxn],k,ans,ans1;
bool dfs(int x)
{
for (int i=1; i<=m; i++)
{
if (a[x][i]&&!vis[i])
{
vis[i]=1;
if (match[i]==0||dfs(match[i]))
{
match[i]=x;
return 1;
}
}
}
return 0;
}
int main() {
scanf("%d%d%d", &n, &m, &k);
for (int i = 1, u, v; i <= k; i++) {
scanf("%d%d", &u, &v);
a[u][v] = 1;
}
for (int i = 1; i <= n; i++) {
memset(vis, 0, sizeof(vis));
if (dfs(i)) {
ans++;
}
}
for (int i = 1; i <= m; i++) {
match1[i] = match[i];
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
a[n + 1][j] = a[n + 2][j] = a[i][j];
}
for (int j = 1; j <= m; j++) {
match[j] = match1[j];
}
memset(vis,0,sizeof(vis));
int mx = 0;
if (dfs(n+1)) mx++;
memset(vis,0,sizeof(vis));
if (dfs(n+2)) mx++;
ans1 = max(ans1, mx);
}
printf("%d\n",ans+ans1);
}