#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <numeric>
#include <bitset>
#include <cmath>

static const int MOD = 1000000007;
using ll = long long;
using u32 = unsigned;
using u64 = unsigned long long;
using namespace std;

template<class T> constexpr T INF = ::numeric_limits<T>::max()/32*15+208;

int main() {
    int dys[] = {-1, -1, 0, 0, 1, 1};
    int dx_odd[] = {-1, 0, -1, 1, -1, 0};
    int dx_even[] = {0, 1, -1, 1, 0, 1};
    int n, m;
    while(cin >> m >> n, m){
        vector<vector<int>> v(n+2, vector<int>(m+2, -1));
        auto ddist = v;
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < m; ++j) {
                v[i+1][j+1] = 0;
                ddist[i+1][j+1] = INF<int>;
            }
        }
        int s;
        cin >> s;
        vector<int> ys(s), xs(s);
        for (int i = 0; i < s; ++i) {
            cin >> xs[i] >> ys[i];
        }
        int ans = 0;
        int q;
        cin >> q;
        for (int i = 0; i < q; ++i) {
            int xx, yy;
            cin >> xx >> yy;
            ys.emplace_back(yy);
            xs.emplace_back(xx);
            auto vv = v, dist = ddist;
            queue<pair<int, int>> Q;
            for (int j = 0; j < ys.size(); ++j) {
                Q.emplace(ys[j], xs[j]);
                vv[ys[j]][xs[j]] = j+1;
                dist[ys[j]][xs[j]] = 0;
            }
            while(!Q.empty()){
                int y, x; tie(y, x) = Q.front(); Q.pop();
                for (int k = 0; k < 6; ++k) {
                    int ya = y + dys[k], xa = x + (y&1 ? dx_odd :dx_even)[k];
                    if(!~v[ya][xa]) continue;
                    if(dist[ya][xa] > dist[y][x]+1){
                        dist[ya][xa] = dist[y][x]+1;
                        vv[ya][xa] = vv[y][x];
                        Q.emplace(ya, xa);
                    }else if(dist[ya][xa] == dist[y][x]+1) {
                        if(vv[ya][xa] != vv[y][x]){
                            vv[ya][xa] = -1;
                        }
                    }
                }
            }
            int val = 0;
            for (int j = 0; j < n; ++j) {
                for (int k = 0; k < m; ++k) {
                    val += (vv[j+1][k+1] == ys.size());
                    // cout << vv[j+1][k+1] << " ";
                }
                // puts("");
            }
            ans = max(ans, val);
            ys.pop_back();
            xs.pop_back();
        }
        cout << ans << "\n";
    }
    return 0;
}
