public static void main(String[] args) {
try{
Scanner sc = new Scanner(System.in);
int m, n;
int dem2 = 0;
ArrayList ketqua = new ArrayList<>();
n = sc.nextInt();
m = sc.nextInt();
while (m != 0 && n != 0) {
boolean[][] nm = new boolean[n][m];
for (int n3 = 0; n3 < n; ++n3)
for (int m3 = 0; m3 < m; ++m3) {
nm[n3][m3] = false;
}
//Quân hậu
int countq = sc.nextInt();
int countq2 = countq;
int[] nq = new int[countq];
int[] mq = new int[countq];
while (countq > 0) {
--countq;
nq[countq] = sc.nextInt();
nq[countq] = nq[countq] - 1;
mq[countq] = sc.nextInt();
mq[countq] = mq[countq] - 1;
nm[nq[countq]][mq[countq]] = true;
}
//quân mã
int countk = sc.nextInt();
int countk2 = countk;
int[] nk = new int[countk];
int[] mk = new int[countk];
while (countk > 0) {
--countk;
nk[countk] = sc.nextInt();
nk[countk] = nk[countk] - 1;
mk[countk] = sc.nextInt();
mk[countk] = mk[countk] - 1;
nm[nk[countk]][mk[countk]] = true;
}
//quân tốt
int countp = sc.nextInt();
int[] np = new int[countp];
int[] mp = new int[countp];
while (countp > 0) {
--countp;
np[countp] = sc.nextInt();
np[countp] = np[countp] - 1;
mp[countp] = sc.nextInt();
mp[countp] = mp[countp] - 1;
nm[np[countp]][mp[countp]] = true;
}
//quân hậu
countq = countq2;
while (countq > 0) {
--countq;
for (int j = 1; ; ++j) {
if (nq[countq] + j < n && mq[countq] + j < m) {
if (!nm[nq[countq] + j][mq[countq] + j])
nm[nq[countq] + j][mq[countq] + j] = true;
} else break;
}
for (int j = 1; ; ++j) {
if (nq[countq] - j >= 0 && mq[countq] - j >= 0 && !nm[nq[countq] - j][mq[countq] - j]) {
nm[nq[countq] - j][mq[countq] - j] = true;
} else break;
}
for (int j = 1; ; ++j) {
if (nq[countq] - j >= 0 && mq[countq] + j < m && !nm[nq[countq] - j][mq[countq] + j]) {
nm[nq[countq] - j][mq[countq] + j] = true;
} else break;
}
for (int j = 1; ; ++j) {
if (nq[countq] + j < n && mq[countq] - j >= 0 && !nm[nq[countq] + j][mq[countq] - j]) {
nm[nq[countq] + j][mq[countq] - j] = true;
} else break;
}
for (int j = 1; ; ++j) {
if (nq[countq] + j < n && !nm[nq[countq] + j][mq[countq]]) {
nm[nq[countq] + j][mq[countq]] = true;
} else break;
}
for (int j = 1; ; ++j) {
if (nq[countq] - j >= 0 && !nm[nq[countq] - j][mq[countq]]) {
nm[nq[countq] - j][mq[countq]] = true;
} else break;
}
for (int j = 1; ; ++j) {
if (mq[countq] + j < m && !nm[nq[countq]][mq[countq] + j]) {
nm[nq[countq]][mq[countq] + j] = true;
} else break;
}
for (int j = 1; ; ++j) {
if (mq[countq] - j >= 0 && !nm[nq[countq]][mq[countq] - j]) {
nm[nq[countq]][mq[countq] - j] = true;
} else break;
}
}
//Quân mã
while (countk2 > 0) {
--countk2;
if (nk[countk] + 2 < n && mk[countk] + 1 < m)
nm[nk[countk] + 2][mk[countk] + 1] = true;
if (nk[countk] + 2 < n && mk[countk] - 1 >= 0)
nm[nk[countk] + 2][mk[countk] - 1] = true;
if (nk[countk] - 2 >= 0 && mk[countk] + 1 < m)
nm[nk[countk] - 2][mk[countk] + 1] = true;
if (nk[countk] - 2 >= 0 && mk[countk] - 1 < m)
nm[nk[countk] - 2][mk[countk] - 1] = true;
if (nk[countk] + 1 < n && mk[countk] + 2 < m)
nm[nk[countk] + 1][mk[countk] + 2] = true;
if (nk[countk] + 1 < n && mk[countk] - 2 >= 0)
nm[nk[countk] + 1][mk[countk] - 2] = true;
if (nk[countk] - 1 >= 0 && mk[countk] + 2 < m)
nm[nk[countk] - 1][mk[countk] + 2] = true;
if (nk[countk] - 1 >= 0 && mk[countk] - 2 >= 0)
nm[nk[countk] - 1][mk[countk] - 2] = true;
}
Integer dem = 0;
for (int n3 = 0; n3 < n; ++n3)
for (int m3 = 0; m3 < m; ++m3) {
if (!nm[n3][m3]) {
++dem;
}
}
ketqua.add( dem);
dem2++;
n = sc.nextInt();
m = sc.nextInt();
}
for (int j3 = 0; j3 < dem2; ++j3)
System.out.println("Board " + (j3 + 1) + " has " + ketqua.get(j3) + " safe squares.");
}catch (NumberFormatException e){
}
}