#include<queue>
#include<cstdio>

#define	mp	make_pair

using namespace std;

typedef	pair<int,int>	pii;

const int dx[2][6]={{1,0,-1,-1,-1,0},{1,1,0,-1,0,1}};
const int dy[6]={0,-1,-1,0,1,1};
int dis[100][100];
bool land[100][100];

int main(){
	for(int m,n;scanf("%d%d",&n,&m),n;){
		for(int i=0;i<m;i++)for(int j=0;j<n;j++)	land[i][j]=false,dis[i][j]=1<<30;

		int s;	scanf("%d",&s);
		for(int i=0;i<s;i++){
			int px,py;	scanf("%d%d",&px,&py);
			px--,py--;
			land[py][px]=true;

			dis[py][px]=0;
			queue<pii> qu;	qu.push(mp(py,px));
			while(!qu.empty()){
				pii a=qu.front();	qu.pop();
				int y=a.first,x=a.second;
				for(int k=0;k<6;k++){
					int yy=y+dy[k],xx=x+dx[y%2][k];
					if(0<=yy && yy<m && 0<=xx && xx<n){
						if(dis[y][x]+1<dis[yy][xx]){
							qu.push(mp(yy,xx));
							dis[yy][xx]=dis[y][x]+1;
						}
					}
				}
			}
		}

		int t,ans=0;	scanf("%d",&t);
		while(t--){
			static int tmp[100][100];
			for(int i=0;i<m;i++)for(int j=0;j<n;j++)	tmp[i][j]=1<<30;

			int px,py;	scanf("%d%d",&px,&py);
			px--,py--;
			if(dis[py][px]==0)	continue;

			int cnt=0;
			tmp[py][px]=0;
			queue<pii> qu;	qu.push(mp(py,px));
			while(!qu.empty()){
				pii a=qu.front();	qu.pop();
				int y=a.first,x=a.second;
				cnt++;
				for(int k=0;k<6;k++){
					int yy=y+dy[k],xx=x+dx[y%2][k];
					if(0<=yy && yy<m && 0<=xx && xx<n){
						if(tmp[y][x]+1<tmp[yy][xx] && tmp[y][x]+1<dis[yy][xx]){
							qu.push(mp(yy,xx));
							tmp[yy][xx]=tmp[y][x]+1;
						}
					}
				}
			}

			ans=max(ans,cnt);
		}

		printf("%d\n",ans);
	}

	return 0;
}