#include<iostream>
#include<utility>
#include<queue>
#include<algorithm>
using namespace std;

typedef pair<int,int> P;

int main(){
  int n,m;
  int s,t;
  int x,y;
  int grid[101][101];

  while(cin >> n && n){
    cin >> m;
    for(int i=1;i<=n;i++)
      for(int j=1;j<=m;j++)grid[i][j] = 1<<25;

    cin >> s;
    for(int i=0;i<s;i++){
      cin >> x >> y;
      grid[x][y] = 0;
      queue<P> q;
      q.push(P(x,y));
      while(q.size()){
	P p = q.front();q.pop();
	x=p.first, y=p.second;

	int dx[6]={1,0,-1,1,0,1},dy[6] = {-1,-1,0,0,1,1};
	if(y&1)dx[0] = dx[5] = -1;
	for(int i=0;i<6;i++){
	  int sx = x+dx[i],sy = y+dy[i];
	  if(sx<=0 || sy<=0 || n<sx || m<sy)continue;
	  if(grid[sx][sy]>grid[x][y]+1){
	    grid[sx][sy] = grid[x][y] + 1;
	    q.push(P(sx,sy));
	  }
	}
      }
    }

    int ans = 0;
    cin >> t;
    for(int i=0;i<t;i++){
      cin >> x >> y;
      int hoge = 1;
      int tmp[101][101];
      for(int j=0;j<n;j++)
	for(int k=0;k<m;k++)tmp[j][k] = grid[j][k];

      grid[x][y] = 0;
      queue<P> q;
      q.push(P(x,y));
      while(q.size()){
	P p = q.front();q.pop();
	x=p.first, y=p.second;

	int dx[6]={1,0,-1,1,0,1},dy[6] = {-1,-1,0,0,1,1};
	if(y&1)dx[0] = dx[5] = -1;
	for(int i=0;i<6;i++){
	  int sx = x+dx[i],sy = y+dy[i];
	  if(sx<=0 || sy<=0 || n<sx || m<sy)continue;
	  if(grid[sx][sy]>grid[x][y]+1){
	    grid[sx][sy] = grid[x][y] + 1;
	    hoge++;
	    q.push(P(sx,sy));
	  }
	}
      }
      ans = max(ans,hoge);
      for(int j=0;j<n;j++)
	for(int k=0;k<m;k++)grid[j][k] = tmp[j][k];
    }
    cout << ans << endl;
  }
}