#include<cstdio>
#include<cstring>
#include<utility>
#include<algorithm>
#include<queue>
using namespace std;
typedef struct pos{int x,y,cost;}pos;

int M,N,S,T,m[105][105],m2[105][105],p,q,R,t;

int bfs(int (*m)[105],int x,int y)
{
	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}};
	queue<pos>Q;
	m[y][x]=0;
	pos tmp={x,y,0};
	Q.push(tmp);
	while(!Q.empty())
	{
		tmp=Q.front();Q.pop();
		int p=tmp.y%2;
		for(int i=0;i<6;i++)
		{
			if(0<=tmp.y+my[p][i]&&tmp.y+my[p][i]<N&&0<=tmp.x+mx[p][i]&&tmp.x+mx[p][i]<M&&m[tmp.y+my[p][i]][tmp.x+mx[p][i]]>tmp.cost+1)
				{
					m[tmp.y+my[p][i]][tmp.x+mx[p][i]]=tmp.cost+1;
					pos tmp2={tmp.x+mx[p][i],tmp.y+my[p][i],tmp.cost+1};
					c++;
					Q.push(tmp2);
				}
		}
	}
	return c;
}

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