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>
using namespace std;
const int fx[8] = {1, -1, 0, 0, 1, -1, 1, -1},
          fy[8] = {0, 0, 1, -1, 1, 1, -1, -1};
const int Maxr = 3005, Maxn = 300005;
int r, c, n, ans = 0;
int visi[Maxr][Maxr * 2];
bool flag[Maxr][Maxr * 2];
inline int get() {
  char ch;
  while (!isdigit(ch = getchar()))
    ;
  int v = ch - 48;
  while (isdigit(ch = getchar())) v = v * 10 + ch - 48;
  return v;
}
struct info {
  int x, y;
  info() {}
  info(int x, int y) : x(x), y(y) {}
  bool operator!=(const info &rhs) const { return x != rhs.x || y != rhs.y; }
} fa[Maxr][Maxr * 2];
info find(int x, int y) {
  return fa[x][y].x ? fa[x][y] = find(fa[x][y].x, fa[x][y].y) : info(x, y);
}
void Union(int x1, int y1, int x, int y) {
  info u = find(x1, y1), v = find(x, y);
  if (u != v) fa[u.x][u.y] = v;
}
void add(int x, int y) {
  flag[x][y] = true;
  for (int k = 0, x1, y1; k < 8; k++) {
    x1 = x + fx[k];
    y1 = y + fy[k];
    if (flag[x1][y1]) Union(x1, y1, x, y);
  }
}
bool check(int x, int y, int cur, bool f) {
  for (int k = 0, x1, y1; k < 8; k++) {
    x1 = x + fx[k];
    y1 = y + fy[k];
    if (flag[x1][y1]) {
      info u = find(x1, y1);
      if (f && visi[u.x][u.y] == cur) return true;
      if (!f) visi[u.x][u.y] = cur;
    }
  }
  return false;
}
int main() {
  r = get();
  c = get();
  n = get();
  for (int i = 1; i <= n; i++) {
    int x = get(), y = get();
    flag[x][y] = flag[x][y + c] = true;
    visi[x][y] = visi[x][y + c] = i;
    check(x, y, i, false);
    if (check(x, y + c, i, true))
      flag[x][y] = flag[x][y + c] = false;
    else
      ++ans, add(x, y), add(x, y + c);
  }
  printf("%d\n", ans);
  return 0;
}
