#include <bits/stdc++.h>

using namespace std;

#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define REP(i,n) FOR(i,0,n)
#define ALL(v) (v).begin(),(v).end()
#define fi first
#define se second

template<typename A, typename B> inline bool chmax(A &a, B b) { if (a<b) { a=b; return 1; } return 0; }
template<typename A, typename B> inline bool chmin(A &a, B b) { if (a>b) { a=b; return 1; } return 0; }

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<int, pll> pip;
const ll INF = 1ll<<29;
const ll MOD = 1000000007;
const double EPS  = 1e-9;


int M, N, S, T;
int d[2][100][100]; // ??????, ???????¨??????¨

/////////////////////////////////
int dx[2][6] = { {0,1,0,-1,-1,-1}, {1,1,1,0,-1,0} };
int dy[6] = {-1,0,1,1,0,-1};

void solve(int y, int x) {
	queue<pii> que;
	fill(d[1][0], d[2][0], INF);
	
	d[1][y][x] = 0;
	que.push(pii(y, x));
	
	while (!que.empty()) {
		pii now = que.front(); que.pop();
		
		int y = now.fi, x = now.se;
		int c = d[1][y][x];
		
		REP(i, 6) {
			int xx = x + dx[y & 1][i], yy = y + dy[i];
			if (!(xx >= 0 && xx < M && yy >= 0 && yy < N)) continue;
			if (d[1][yy][xx] <= c + 1) continue;
			d[1][yy][xx] = c + 1;
			que.push(pii(yy, xx));
		}
		
	}
}

int main() {

	while (cin >> M >> N, M || N) {
		
		fill(d[0][0], d[2][0], INF);
		
		cin >> S;
		REP(i, S) {
			int x, y; scanf("%d %d", &x, &y);
			solve(y - 1, x - 1);
			REP(j, N) REP(k, M) chmin(d[0][j][k], d[1][j][k]);
		}
		
		int ans = 0;
		
		cin >> T;
		REP(i, T) {
			int x, y; scanf("%d %d", &x, &y);
			solve(y - 1, x - 1);
			
			int cnt = 0;
			REP(j, N) REP(k, M) if (d[0][j][k] > d[1][j][k]) cnt++;
			chmax(ans, cnt);
		}
		
		cout << ans << endl;
		
	}
	return 0;
}