#include <iostream>
#include <cstring>
#include <set>
using namespace std;
int map[100][100];
const int evennext[6][2] = {
  {-1,-1},{0,-1},{-1,0},{1,0},{-1,1},{0,1},
};
const int oddnext[6][2] = {
  {0,-1},{1,-1},{-1,0},{1,0},{0,1},{1,1},
};
int m,n;
void paint(int d,int x,int y)
{
  if(map[y][x] <= d) return;
  map[y][x] = d;
  const int (*np)[2] = (y % 2 == 0) ? evennext : oddnext;
  for(int i=0; i<6; i++){
    int nx = x + np[i][0];
    int ny = y + np[i][1];
    if(0 <= nx && nx < m && 0 <= ny && ny < n){
      paint(d+1,nx,ny);
    }
  }
  return;
}
void count(int d,int x,int y,set<pair<int,int> > &memo)
{
  if(map[y][x] <= d) return;
  const int (*np)[2] = (y % 2 == 0) ? evennext : oddnext;
  if(!memo.insert(make_pair<int,int>(x,y)).second) return;
  for(int i=0; i<6; i++){
    int nx = x + np[i][0];
    int ny = y + np[i][1];
    if(0 <= nx && nx < m && 0 <= ny && ny < n){
      count(d+1,nx,ny,memo);
    }
  }
  return;
}
int main()
{
  for(;;){
    cin >> m;
    if(m == 0) break;
    cin >> n;
    for(int i=0; i<n; i++){
      for(int j=0; j<m; j++){
        map[i][j] = 500;
      }
    }
    int s;
    cin >> s;
    for(int i=0; i<s; i++){
      int x,y;
      cin >> x >> y;
      paint(0,x-1,y-1);
    }
    /*
    for(int i=0; i<n; i++){
      for(int j=0; j<m; j++){
        cout << " " << map[i][j];
      }
      cout << endl;
    }
    */
    int t;
    cin >> t;
    int max = 0;
    for(int i=0; i<t; i++){
      int x,y;
      cin >> x >> y;
      set<pair<int,int> > memo;
      count(0,x-1,y-1,memo);
      if(max < memo.size()) max = memo.size();
    }
    cout << max << endl;
  }
  return 0;
}