#include<cstdio>
#include<cstring>
#include<utility>
#include<algorithm>
#include<queue>
using namespace std;
typedef struct pos
{
	int x,y,cost;
	bool operator ()(pos const& a, pos const& b) const
	{
		return a.cost>b.cost;
	}

}pos;

int M,N,S,T,m[101][101],i,j,p,q,R,t;

int bfs(int x,int y,int abj)
{
	int i,c=1,mx[2][6]={{-1,0,1,0,-1,-1},{0,1,1,1,0,-1}},
			  my[2][6]={{-1,-1,0,1,1,0},{-1,-1,0,1,1,0}};
	priority_queue<pos,vector<pos>,pos>Q;
	m[y][x]=0;
	pos tmp={x,y,0};
	Q.push(tmp);
	while(!Q.empty())
	{
		tmp=Q.top();Q.pop();
		for(i=0;i<abj;i++)
		{
			if(0<=tmp.y+my[tmp.y%2][i]&&tmp.y+my[tmp.y%2][i]<M&&0<=tmp.x+mx[tmp.y%2][i]&&tmp.x+mx[tmp.y%2][i]<N)
				if(m[tmp.y+my[tmp.y%2][i]][tmp.x+mx[tmp.y%2][i]]>tmp.cost+1)
				{
					m[tmp.y+my[tmp.y%2][i]][tmp.x+mx[tmp.y%2][i]]=tmp.cost+1;
					pos tmp2={tmp.x+mx[tmp.y%2][i],tmp.y+my[tmp.y%2][i],tmp.cost+1};
					c++;
					Q.push(tmp2);
				}
		}
	}
	return c;
}

int main()
{
	for(i=0;i<100;i++)
		for(j=0;j<100;j++)
		{

		}
	for(;~scanf("%d%d%d",&M,&N,&S),M;)
	{
		memset(m,0x7,sizeof(m));
		for(i=0;i<S;i++)
		{
			scanf("%d%d",&p,&q);
			bfs(p-1,q-1,6);
		}
		for(R=0,scanf("%d",&T),j=0;j<T;j++)
		{
			scanf("%d%d",&p,&q);
			t=bfs(p-1,q-1,6);
			R=t<R?R:t;
		}
		printf("%d\n",R);
	}
	return 0;
}