#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
using namespace std;
int shz1[101][101];
int shz2[101][101];
int cnt=0,tot,a,b,c;
void dfs(int i,int j){
if(shz1[i][j]==-1)return;//干燥部分
if(i<0||i>=a||j<0||j>=b)return ;//越界
if(shz2[i][j]==1)return;//已经走过的路径
shz2[i][j]=1;//标记已经走过
tot++;//记录走过的块
dfs(i-1,j);
dfs(i+1,j);
dfs(i,j-1);
dfs(i,j+1);
}
int main(){
cin>>a>>b>>c;
memset(shz1,-1,sizeof(shz1));
for(int i=0;i<c;i++){
int x,y;
cin>>x>>y;
shz1[x-1][y-1]=0;
}
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
tot=0;
if(shz1[i][j]==0)dfs(i,j);
cnt=max(cnt,tot);
}
}
printf("%d",cnt);
return 0;
}
#include<cmath>
#include<cstdio>
#include<cstring>
using namespace std;
int shz1[101][101];
int shz2[101][101];
int cnt=0,tot,a,b,c;
void dfs(int i,int j){
if(shz1[i][j]==-1)return;//干燥部分
if(i<0||i>=a||j<0||j>=b)return ;//越界
if(shz2[i][j]==1)return;//已经走过的路径
shz2[i][j]=1;//标记已经走过
tot++;//记录走过的块
dfs(i-1,j);
dfs(i+1,j);
dfs(i,j-1);
dfs(i,j+1);
}
int main(){
cin>>a>>b>>c;
memset(shz1,-1,sizeof(shz1));
for(int i=0;i<c;i++){
int x,y;
cin>>x>>y;
shz1[x-1][y-1]=0;
}
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
tot=0;
if(shz1[i][j]==0)dfs(i,j);
cnt=max(cnt,tot);
}
}
printf("%d",cnt);
return 0;
}