#include "bits/stdc++.h"
#include<unordered_map>
#include<unordered_set>
#pragma warning(disable:4996)
using namespace std;
using ld = long double;
const ld eps = 1e-9;

int getdis(const pair<int, int>l, const pair<int, int>r) {

	int dy =r.second - l.second;
	int dx =r.first - l.first;
	if (l.second % 2 == r.second % 2) {
		assert(abs(dy) % 2 == 0);
		if (abs(dx) <= abs(dy) / 2)return abs(dy);
		else {
			return  abs(dy) + (abs(dx) - abs(dy) / 2);
		}
	}
	else if (l.second % 2==0 && r.second % 2 == 1) {
		{
			int amin = 1e8;
			int y = l.second > r.second ? -1 : 1;
			for (int x = -1; x <= 0; ++x) {
				amin = min(amin, 1 + getdis(make_pair(l.first + x, l.second + y), r));
			}
			
			return amin;
		}
	}
	else {
		{
			int amin = 1e8;
			int y = l.second > r.second ? -1 : 1;
			for (int x = 0; x <= 1; ++x) {
				amin = min(amin, 1 + getdis(make_pair(l.first + x, l.second + y), r));
			
			}
			return amin;
		}
	}
}

int main() {
	while (1) {
		int W, H; cin >> W >> H;
		if (!W)break;
		vector<vector<int>>field(H, vector<int>(W, 100000));
		int S; cin >> S;
		for (int i = 0; i < S; ++i) {
			int x, y; cin >> x >> y; x--; y--;
			for (int j = 0; j < H; ++j) {
				for (int k = 0; k < W; ++k) {
					field[j][k] = min(field[j][k], getdis(make_pair(x, y), make_pair(k, j)));
				}
			}
		}
		int T; cin >> T;
		int ans = 0;
		for (int i = 0; i < T; ++i) {
			int p, q; cin >> p >> q; p--; q--;
			int sum = 0;
			for (int j = 0; j < H; ++j) {
				for (int k = 0; k < W; ++k) {
					if (field[j][k] > getdis(make_pair(p,q), make_pair(k, j)))sum++;

				}
			}
			ans = max(ans, sum);
		}
		cout << ans << endl;
	}
	return 0;
}