#include <iostream>
#include <vector>
#include <map>
#include <queue>
#include <algorithm>
using namespace std;

const int MAX_N = 101;
const int INF = 1e+9;
typedef pair<int,int> P;

int w, h;
// st[y][x] := (x,y) が店舗かどうか
int st[MAX_N][MAX_N];

// 移動6方向のベクトル(偶数列と奇数列で遷移の仕方が異なる)
int dx[2][6] = {  
	{ -1, 0, -1, 1, -1, 0 },
	{  0, 1, -1, 1,  0, 1 }
};
int dy[6] = { -1, -1, 0, 0, 1, 1 };

// BFSのときに利用
int d[MAX_N][MAX_N];
// m[y][x] := (x,y) から最短の店舗までの距離
int m[MAX_N][MAX_N];
// 解
int ans;

void init(){
	for(int y=0 ; y < MAX_N ; y++ ){
		for(int x=0 ; x < MAX_N ; x++ ){
			m[y][x] = st[y][x] = 0;
		}
	}
}

void clear_d(){
	for(int y=0 ; y < MAX_N ; y++ ){
		for(int x=0 ; x < MAX_N ; x++ ){
			d[y][x] = INF;
		}
	}
}

// (sx,sy) から最短の店舗までの距離を求める
void bfs(int sx, int sy){
	queue<P> q;
	clear_d();
	q.push( P(sx,sy) );
	d[sy][sx] = 0;
	
	while( !q.empty() ){
		int px = q.front().first; 
		int py = q.front().second;
		q.pop();
		
		if( st[py][px] == 1 ){
			m[sy][sx] = d[py][px];
			break;
		}
		for(int i=0 ; i < 6 ; i++ ){
			int mx = px + dx[py%2][i];
			int my = py + dy[i];
			if( mx < 0 || my < 0 || mx >= w || my >= h ) continue;
			
			if( d[my][mx] == INF ){
				q.push( P(mx,my) );
				d[my][mx] = d[py][px] + 1;
			}
		}
	}
}

// (sx,sy) からカバーできるブロック数
int solve(int sx, int sy){
	queue<P> q;
	clear_d();
	q.push( P(sx,sy) );
	d[sy][sx] = 0;
	int cnt = 0;
	
	while( !q.empty() ){
		int px = q.front().first; 
		int py = q.front().second;
		q.pop();
		if( d[py][px] < m[py][px] ){
			cnt++;
		}else{
			continue;
		}
		
		for(int i=0 ; i < 6 ; i++ ){
			int mx = px + dx[py%2][i];
			int my = py + dy[i];
			if( mx < 0 || my < 0 || mx >= w || my >= h ) continue;
			
			if( d[my][mx] == INF ){
				q.push( P(mx,my) );
				d[my][mx] = d[py][px] + 1;
			}
		}
	}
	return cnt;
}

int main(){
	while( cin >> w >> h , w || h ){
		init();
		
		int s, t;
		cin >> s;
		for(int i=0 ; i < s ; i++ ){
			int x, y;
			cin >> x >> y;
			x--; y--;
			st[y][x] = 1;
		}
		
		for(int y=0 ; y < h ; y++ ){
			for(int x=0 ; x < w ; x++ ){
				bfs( x , y );
			}
		}
		
		ans = 0;
		cin >> t;
		for(int i=0 ; i < t ; i++ ){
			int x, y;
			cin >> x >> y;
			x--; y--;
			int cnt = solve( x, y );
			ans = max( ans , cnt );
		}
		cout << ans << endl;
	}
}