#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cassert>
#include<vector>
#include<deque>
using namespace std;
typedef pair<int,int> P;
int n,m,cnt;
int mincost[110][110];
bool visited[110][110];
int dx[2][6] = {{-1,+0,1,0,-1,-1},{+0,+1,1,1,0,-1}};
int dy[2][6] = {{-1,-1,0,1,+1,+0},{-1,-1,0,1,1,+0}};
bool f;
 
void dfs(int x,int y,int cost)
{
  //if(!f)
  //cout << "xy = "  << x << "," << y << " cost = " << cost << endl;
  for(int i=0;i<6;i++)
    {
      int nx = x + dx[y%2][i];
      int ny = y + dy[y%2][i];
      if(!(0 <= nx && nx < m && 0 <= ny && ny < n))
    continue;
      //if(!f)cout << "mincost["<<ny<<"]["<<nx<<"] = " << mincost[ny][nx] << " = cost + 1  = " << cost + 1  << endl;
      if(mincost[ny][nx] > cost+1)
    {
      if(!visited[ny][nx])
        cnt++;
      visited[ny][nx] = true;
      mincost[ny][nx] = cost + 1;
      dfs(nx,ny,cost+1);
    }
    }
}
 
int main()
{
  while(true)
    {
      cin >> m;
      if(!m) break;
      cin >> n;
      for(int i=0;i<n;i++) 
    for(int j=0;j<m;j++)
      mincost[i][j] = (1<<29);  
      f = true;
      int s,t,mex = 0;
      scanf("%d",&s);
      for(int i=0;i<s;i++)
    {
      int x,y;
      scanf("%d %d",&x,&y);
      x--,y--;
      mincost[y][x] = 0;
      dfs(x,y,0);
    }
      f = false;
      scanf("%d",&t);
      for(int i=0;i<t;i++)
    {   
      int pre_mincost[n][m];
      for(int j=0;j<n;j++)
        for(int k=0;k<m;k++)
          pre_mincost[j][k] = mincost[j][k],visited[j][k] = false;
      int p,q;
      scanf("%d %d",&p,&q);
 
      cnt = 1,p--,q--;
      mincost[q][p] = 0,visited[q][p] = true;
       
      dfs(p,q,0);
       
      mex = max(mex,cnt);
      for(int j=0;j<n;j++)
        for(int k=0;k<m;k++)
          mincost[j][k] = pre_mincost[j][k];
    }
      cout << mex << endl;
    }
  return 0;
}