#include <bits/stdc++.h>
using namespace std;
const int dx[8] = {0, 0, 1, -1, 1, -1, 1, -1},
          dy[8] = {1, -1, 0, 0, 1, 1, -1, -1};
int p[3005 * 3005 * 2], n, m, i, j, x, y, xx, yy, q, t, really, ans;
bool b[3005][3005 * 2];
int f(int x, int y) { return x * (m * 2 + 2) + y; }
void InitP(int nn, int mm) {
  int i, j, cnt = 0;
  for (i = 0; i < nn; i++)
    for (j = 0; j < mm; j++) p[cnt++] = f(i, j);
}
int find_set(int x) {
  if (p[x] == x) return x;
  return p[x] = find_set(p[x]);
}
int find_set(int x, int y) { return find_set(f(x, y)); }
void union_sets(int a, int b) {
  a = find_set(a);
  b = find_set(b);
  if (rand() & 1) swap(a, b);
  p[a] = b;
}
void union_sets(int x, int y, int xx, int yy) {
  union_sets(f(x, y), f(xx, yy));
}
void foo(int& y) {
  if (y == 0)
    y = 2 * m;
  else if (y == 2 * m + 1)
    y = 1;
}
set<int> s;
int main() {
  cin >> n >> m >> q;
  if (m == 1) {
    cout << 0;
    return 0;
  }
  InitP(n + 2, m * 2 + 2);
  while (q--) {
    cin >> x >> y;
    s.clear();
    for (i = 0; i < 8; i++) {
      xx = x + dx[i];
      yy = y + dy[i];
      foo(yy);
      if (b[xx][yy]) {
        t = find_set(xx, yy);
        s.insert(t);
      }
    }
    really = true;
    for (i = 0; i < 8; i++) {
      xx = x + dx[i];
      yy = y + m + dy[i];
      foo(yy);
      if (b[xx][yy]) {
        t = find_set(xx, yy);
        if (s.find(t) != s.end()) {
          really = false;
          break;
        }
      }
    }
    if (really) {
      ++ans;
      for (i = 0; i < 8; i++) {
        xx = x + dx[i];
        yy = y + dy[i];
        foo(yy);
        if (b[xx][yy]) union_sets(x, y, xx, yy);
        yy = y + m + dy[i];
        foo(yy);
        if (b[xx][yy]) union_sets(x, y + m, xx, yy);
      }
      b[x][y] = b[x][y + m] = true;
    }
  }
  cout << ans;
  return 0;
}
