#include<cstdio>
#include<vector>
#include<string>
#include<queue>
#include<iostream>
#include<algorithm>
#include<map>
#include<set>

using namespace std;

#define reps(i,f,n) for(int i=f;i<int(n);i++)
#define rep(i,n) reps(i,0,n)

#define fi first
#define se second

typedef pair<int,int> pii;

int h,w;
int n;
int m;
vector<pii> pos;
vector<pii> hoge;

bool input(){
	cin>>w>>h;
	if(w==0)return false;
	cin>>n;
	pos.resize(n);
	rep(i,n){
		cin>>pos[i].fi>>pos[i].se;
		pos[i].fi--;
		pos[i].se--;
	}
	cin>>m;
	hoge.resize(m);
	rep(i,m){
		cin>>hoge[i].fi>>hoge[i].se;
		hoge[i].fi--;
		hoge[i].se--;
	}
	return true;
}

int dist(pii a, pii b){
	
	a.fi += -(a.se)/2;
	b.fi += -(b.se)/2;
	
	if(a.se > b.se)swap(a,b);
	
	b.fi -= a.fi;
	b.se -= a.se;
	
	int ret = 0;
	if(b.fi >= 0){
		ret = b.fi + b.se;
	}else if(b.se >= -b.fi){
		ret = b.se;
	}else{
		ret = -b.fi;
	}
	
	
	return ret;
}

int solve2(int x,int y){
	
	int ret = 0;
	vector<pii> cand = pos;
	cand.push_back(pii(x,y));
	
	rep(i,h){
		rep(j,w){
			const int INF = 1111;
			int cnt = 0;
			int mini = INF;
			int minp = -1;
			rep(k, cand.size()){
				int d = dist(pii(j,i), cand[k]);
				
				if(d==mini){
					cnt++;
				}
				if(d<mini){
					cnt = 1;
					mini = d;
					minp = k;
				}
			}
			
			if(cnt==1 && minp==pos.size()){
				ret++;
			}
		}
	}
	return ret;
}

int solve(){
	int ret = 0;
	
	rep(i,m){
		
		int val = solve2(hoge[i].fi,hoge[i].se);
		ret = max(ret, val);
	}
	
	return ret;
}

void call(){
	cout<<solve()<<endl;
}

int main(){
	while(input())call();
}