2 5 10
2 2
1 1
1 4
2 1
1 2
1 5
2 4
2 5
1 3
2 3
 2 2 2
1 1
2 2
 3 3 9
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
 7 5 35
5 3
3 5
1 1
2 5
6 4
7 2
5 1
3 4
6 5
7 3
4 1
2 2
4 2
2 4
4 3
3 3
6 1
1 2
4 5
1 3
2 1
5 5
7 5
7 1
6 2
1 4
1 5
3 2
4 4
5 2
2 3
6 3
7 4
5 4
3 1
 1 5 4
1 1
1 2
1 4
1 5
 1 1 1
1 1
 5 7 21
4 4
4 5
5 5
5 6
5 7
5 1
5 2
4 2
3 2
3 1
3 7
3 6
2 6
1 6
1 7
1 1
1 2
1 3
1 4
2 4
3 4
 2 1 1
1 1
 2 2 4
2 1
1 1
1 2
2 2
 3000 3000 1
2222 738
 5 7 35
1 2
2 3
5 1
5 7
4 4
5 3
3 1
2 6
4 5
2 7
4 1
2 1
2 2
1 7
5 6
3 6
4 6
1 6
1 1
3 3
3 4
4 2
2 5
5 5
3 5
2 4
1 5
1 3
4 3
5 4
1 4
3 7
4 7
3 2
5 2
 5 4 1
4 1
 3 4 12
2 3
3 2
2 2
2 1
1 2
3 1
1 4
1 3
3 3
2 4
3 4
1 1
 3 3 3
1 1
2 2
3 3

8
 1
 6
 26
 4
 0
 20
 0
 2
 1
 28
 1
 9
 3

#include <bits/stdc++.h>
const int MAX_SIZE = 3000;
const int D[8][2] = {{1, 0},  {1, 1},   {0, 1},  {-1, 1},
                     {-1, 0}, {-1, -1}, {0, -1}, {1, -1}};
int fa[MAX_SIZE * MAX_SIZE * 2 + 10];
bool occ[MAX_SIZE + 10][MAX_SIZE * 2 + 10];
int h, w;
int n, vn, arr[MAX_SIZE * MAX_SIZE * 2 + 10], an;
int findFather(int a) {
  int r;
  an = 0;
  for (r = a; fa[r] != r; r = fa[r]) arr[an++] = r;
  for (int i = 0; i < an; i++) fa[arr[i]] = r;
  return r;
}
inline void readInt(int& a) {
  a = 0;
  int c;
  do c = getchar();
  while (c < '0' || c > '9');
  do {
    a = a * 10 - '0' + c;
    c = getchar();
  } while (c >= '0' && c <= '9');
}
int main() {
  readInt(h);
  readInt(w);
  w <<= 1;
  readInt(n);
  vn = h * w;
  int cnt = 0;
  for (int i = 0; i < vn; i++) fa[i] = i;
  while (n--) {
    int x, y;
    readInt(x);
    readInt(y);
    --x;
    --y;
    bool flag = true;
    for (int d = 0; d < 8; d++) {
      int nx = x + D[d][0];
      int ny = y + D[d][1];
      if (nx < 0 || nx >= h || ny < 0 || ny >= w) continue;
      if (!occ[nx][ny]) continue;
      for (int d1 = 0; d1 < 8; d1++) {
        int nx1 = x + D[d1][0];
        int ny1 = y + (w >> 1) + D[d1][1];
        if (nx1 < 0 || nx1 >= h || ny1 < 0 || ny1 >= w) continue;
        if (!occ[nx1][ny1]) continue;
        if (findFather(nx * w + ny) == findFather(nx1 * w + ny1)) {
          flag = false;
          break;
        }
      }
      if (!flag) break;
    }
    if (flag) {
      ++cnt;
      occ[x][y] = true;
      occ[x][y + (w >> 1)] = true;
      for (int d = 0; d < 8; d++) {
        int nx = D[d][0] + x;
        int ny = D[d][1] + y;
        if (!(nx < 0 || nx >= h || ny < 0 || ny >= w) && occ[nx][ny])
          fa[findFather(x * w + y)] = findFather(nx * w + ny);
        ny = D[d][1] + (w >> 1) + y;
        if (!(nx < 0 || nx >= h || ny < 0 || ny >= w) && occ[nx][ny])
          fa[findFather(x * w + (w >> 1) + y)] = findFather(nx * w + ny);
      }
    }
  }
  printf("%d\n", cnt);
  return 0;
}
