#include <cstdio>
#include <queue>
#include <utility>
#include <algorithm>

using namespace std;

#define INF (1<<30)

typedef pair<int,int> _P;
typedef pair<_P,int> P;

int map[100][100];
bool vst[100][100];
int dx1[6]={-1,0,1,0,-1,-1},dy1[6]={-1,-1,0,1,1,0};
int dx2[6]={0,1,1,1,0,-1},dy2[6]={-1,-1,0,1,1,0};

int main() {
	int m,n,s,t;
	while(scanf("%d",&m),m) {
		scanf("%d",&n);
		scanf("%d",&s);
		for(int j=0;j<n;j++) {
			for(int i=0;i<m;i++) {
				map[i][j]=INF;
			}
		}
		for(int i=0;i<s;i++) {
			int x,y;
			scanf("%d %d",&x,&y);x--;y--;
			memset(vst,false,sizeof(vst));
			map[x][y]=0;
			vst[x][y]=true;
			queue<P> que;
			que.push(P(_P(x,y),0));
			while(!que.empty()) {
				P p=que.front();que.pop();
				int *dx,*dy;
				if((p.first.second+1)%2) dx=dx1,dy=dy1;
				else dx=dx2,dy=dy2;
				for(int i=0;i<6;i++) {
					int nx=p.first.first+dx[i],ny=p.first.second+dy[i];
					if(0<=nx&&nx<m&&0<=ny&&ny<n&&!vst[nx][ny]) {
						vst[nx][ny]=true;
						map[nx][ny]=min(p.second+1,map[nx][ny]);
						que.push(P(_P(nx,ny),p.second+1));
					}
				}
			}
		}
		scanf("%d",&t);
		int ans=0;
		for(int i=0;i<t;i++) {
			int x,y;
			scanf("%d %d",&x,&y);x--;y--;
			memset(vst,false,sizeof(vst));
			vst[x][y]=true;
			queue<P> que;
			que.push(P(_P(x,y),0));
			int count=0;
			while(!que.empty()) {
				P p=que.front();que.pop();
				int *dx,*dy;
				if(p.second<map[p.first.first][p.first.second]) count++;
				if((p.first.second+1)%2) dx=dx1,dy=dy1;
				else dx=dx2,dy=dy2;
				for(int i=0;i<6;i++) {
					int nx=p.first.first+dx[i],ny=p.first.second+dy[i];
					if(0<=nx&&nx<m&&0<=ny&&ny<n&&!vst[nx][ny]) {
						vst[nx][ny]=true;
						que.push(P(_P(nx,ny),p.second+1));
					}
				}
			}
			if(ans<count) ans=count;
		}
		printf("%d\n",ans);
	}
}