#include<iostream>
using namespace std;
int field[110][110],next[110][110];
int d[6][2] = {{1,0},{0,1},{-1,0},{0,-1},{1,1},{1,-1}};
int dd[6][2] = {{1,0},{0,1},{-1,0},{0,-1},{-1,-1},{-1,1}};
void near(int x, int y, int n);
int coun(int x, int y, int n);
int main(){
  int w,h,n,t;
  while(cin >>w,w){
    cin >>h;
    int shop[10][2],kou[10][2];
    int ans = 0;
    cin >>n; for(int i=0; i<n; i++){cin >>shop[i][0]>>shop[i][1];}
    cin >>t; for(int i=0; i<t; i++){cin >>kou[i][0]>>kou[i][1];}
    for(int i=0; i<110; i++){for(int j=0; j<110; j++){field[j][i] = -1;}}
    for(int i=1; i<=h; i++){for(int j=1; j<=w; j++){field[j][i] = 100;}}
    for(int i=0; i<n; i++){near(shop[i][0],shop[i][1],0);}
    for(int i=0; i<t; i++){
      for(int k=0; k<110; k++){for(int j=0; j<110; j++){next[j][k] = field[j][k];}}
      int r = coun(kou[i][0],kou[i][1],0);
      if(ans<r){ans = r;}
    }
    cout <<ans<<endl;
  }
  return 0;
}
void near(int x, int y, int n){
  field[x][y] = n;
  for(int i=0; i<6; i++){
    if(y%2 == 0){if(field[x+d[i][0]][y+d[i][1]] > n+1){near(x+d[i][0],y+d[i][1],n+1);}}
    else{if(field[x+dd[i][0]][y+dd[i][1]] > n+1){near(x+dd[i][0],y+dd[i][1],n+1);}}
  }
}
int coun(int x, int y, int n){
  int k = 1;
  next[x][y] = n;
  for(int i=0; i<6; i++){
    if(y%2 == 0){if(next[x+d[i][0]][y+d[i][1]] > n+1){k+=coun(x+d[i][0],y+d[i][1],n+1);}}
    else{if(next[x+dd[i][0]][y+dd[i][1]] > n+1){k+=coun(x+dd[i][0],y+dd[i][1],n+1);}}
  }
  return k;
}