#include <iostream>
#include <queue>
#include <algorithm>
#include <map>
#include <set>

using namespace std;
const int N = 100;
const int INF = 100000000;
typedef pair<int, int> P;

class State{
public:
  int x, y, cost;
  State(int y, int x, int cost) : y(y), x(x), cost(cost) {}
};

int w, h, s, t;
int dist[11][N][N];
int dy[2][6] = {{-1, -1, 0, 1, 1, 0},{-1, -1, 0, 1, 1, 0}};
int dx[2][6] = {{-1, 0, 1, 0, -1, -1},{0, 1, 1, 1, 0, -1}};
vector<P> cs;

void bfs(int sy, int sx, int p){
  for(int i=0;i<h;i++) for(int j=0;j<w;j++) dist[p][i][j] = INF;
  queue<State> que;
  que.push(State(sy, sx, 0));
  dist[p][sy][sx] = 0;
  while(!que.empty()){
    State u = que.front(); que.pop();
    for(int i=0;i<6;i++){
      int ny = u.y + dy[u.y%2][i];
      int nx = u.x + dx[u.y%2][i];
      if(ny<0 || ny>=h) continue;
      if(nx<0 || nx>=w) continue;
      if(dist[p][ny][nx] != INF) continue;
      dist[p][ny][nx] = u.cost+1;
      que.push(State(ny, nx, u.cost+1));
    }
   }
}

int solve(){
  int res = 0;
  bfs(cs[s].first, cs[s].second, s);
  for(int i=0;i<h;i++){
    for(int j=0;j<w;j++){
      bool f = false;
      int valm = INF, col;
      for(int k=0;k<=s;k++){
        if(valm > dist[k][i][j]){
          f = false;
          valm = dist[k][i][j];
          col = k;
        }else if(valm == dist[k][i][j]) f = true;
      }
      if(!f && col == s) res++;
    }
  }
  return res;
}

main(){
  while(cin >> w >> h && (w|h)){
    cs.clear();
    int x, y;
    cin >> s;
    for(int i=0;i<s;i++){
      cin >> x >> y;
      cs.push_back(P(y-1, x-1));
    }
    for(int i=0;i<cs.size();i++) bfs(cs[i].first, cs[i].second, i);
    int ans = 0;
    cin >> t;
    for(int i=0;i<t;i++){
      cin >> x >> y;
      cs.push_back(P(y-1, x-1));
      ans = max(ans, solve());
      cs.pop_back();
    }
    cout << ans << endl;
  }
}