import java.util.*;
public class Main{
static int N = 110, n, m, t;
static boolean g[][] = new boolean[N][N], st[][] = new boolean[N][N];
static Pair match[][] = new Pair[N][N];
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
t = sc.nextInt();
int k = t;
while(t -- != 0){
int x = sc.nextInt();
int y = sc.nextInt();
g[x][y] = true;
// 让每个互相攻击的格子连一条边,答案就是所有点之间不能有边且格子数量最多 --> 最大独立集
// 最大独立集 = 在图中选最少的点将点删去 需要使所有的边消去 等价于--> 最小点覆盖 --> 最大匹配
// 这题就等价于求所有点数减去最大匹配
}
int ans = 0;
for(int i = 1; i <= n; i ++){
for(int j = 1; j <= m; j ++){
if( (i+j) % 2 == 1 && !g[i][j]){
st = new boolean[N][N];
if(find(i, j)) ans ++;
}
}
}
System.out.println(n*m - k - ans);
}
static int dx[] = {-2, -1, 1, 2, 2, 1, -1, -2};
static int dy[] = {1, 2, 2, 1, -1, -2, -2, -1};
static boolean find(int x, int y){
for(int i = 0; i < 8; i ++){
int a = x +dx[i], b = y + dy[i];
if(a < 1 || a > n || b < 1 || b > m) continue;
if(g[a][b] || st[a][b]) continue;
st[a][b] = true;
Pair t = match[a][b];
if(t == null || find(t.x, t.y)){
match[a][b] = new Pair(x, y);
return true;
}
}
return false;
}
static class Pair{
int x, y;
Pair(int x, int y){
this.x = x;
this.y = y;
}
}
}