#include<bits/stdc++.h>
using namespace std;

#define INF 10000000
#define F first
#define S second
typedef pair<int,int> P;
//int ody[]={-1,-1,0,0,1,1};   //y軸　奇数のベクトル 
//int odx[]={-1,0,-1,1,-1,0}                //x軸　奇数のベクトル
//int edy[]={-1,-1,0,0,1,1};              //y軸　偶数のベクトル              
//int edx[]={0,1,-1,1,0,1};                //x軸　偶数のベクトル
int dy[6]={-1,-1,0,0,1,1};
int dx[2][6]={{-1,0,-1,1,-1,0},{0,1,-1,1,0,1}}; //1偶数　0奇数
int w,h,s,kx,ky,t,sx,sy;         //m=横　n=縦　
int maps[101][101]; 
int cnt,ans;
void kbfs();
void sbfs();
int main(){
  while(cin>>w>>h,w|h){
    ans=0;
    //初期化
    for(int i=0;i<h;i++){
      for(int j=0;j<w;j++){
	maps[i][j]=INF;
      }
    }
    cin>>s;            //既設のコンビニの数
    for(int i=0;i<s;i++){
      cin>>kx>>ky;     //kx,ky=既設のコンビニの座標
      kx--;ky--;
      maps[ky][kx]=0;
      kbfs();
    }
    
    cin>>t;           //新候補地の数
    for(int i=0;i<t;i++){
      cin>>sx>>sy;    //候補地の座標
      sx--;sy--;
      cnt=0;
      maps[sy][sx]=0;
      sbfs();
      ans=max(ans,cnt);
    }
    cout<<ans<<endl;
  }
}
void kbfs(){
  queue<P>que;
  que.push(P(ky,kx));
  while(!que.empty()){
    P p=que.front();que.pop();
    int y=p.F;
    int x=p.S;
    for(int i=0;i<6;i++){
      int ny=y+dy[i];
      int nx=x+dx[y%2][i];
      if(ny>=0 && ny<h && nx>=0 && nx<w && maps[y][x]+1<maps[ny][nx]){
	maps[ny][nx]=maps[y][x]+1;
	que.push(P(ny,nx));
      }
    }
  }
  return;
}

void sbfs(){
  queue<P>que;
  que.push(P(sy,sx));
  while(!que.empty()){
    cnt++;
    P p=que.front();que.pop();
    int y=p.F;
    int x=p.S;
    for(int i=0;i<6;i++){
      int ny=y+dy[i];
      int nx=x+dx[y%2][i];
      if(ny>=0 && ny<h && nx>=0 && nx<w && maps[y][x]+1<maps[ny][nx]){
	maps[ny][nx]=maps[y][x]+1;
	que.push(P(ny,nx));
      }
    }
  }
  return;
}