#include <bits/stdc++.h>
using namespace std;
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#pragma GCC optimize("unroll-loops")
int n, k, m;
vector<pair<int, int> > tr;
void build(int l, int r, int it) {
  if (l + 1 == r) {
    tr[it].first = l - n;
    return;
  }
  int m = (l + r) / 2;
  build(l, m, 2 * it);
  build(m, r, 2 * it + 1);
  tr[it].first = max(tr[2 * it].first, tr[2 * it + 1].first);
}
void upd(int l, int r, int x, int y, int dl, int it) {
  if (r <= x || y <= l) return;
  if (x <= l && r <= y) {
    tr[it].second += dl;
    return;
  }
  int m = (l + r) / 2;
  upd(l, m, x, y, dl, 2 * it);
  upd(m, r, x, y, dl, 2 * it + 1);
  tr[it].first = max(tr[2 * it].first + tr[2 * it].second,
                     tr[2 * it + 1].first + tr[2 * it + 1].second);
}
int get(int l, int r, int x, int y, int it) {
  if (r <= x || y <= l) return 0;
  if (x <= l && r <= y) {
    return tr[it].first + tr[it].second;
  }
  int m = (l + r) / 2;
  int ans =
      max(get(l, m, x, y, 2 * it), get(m, r, x, y, 2 * it + 1)) + tr[it].second;
  return ans;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> k >> m;
  tr.resize(8 * n);
  build(0, 2 * n, 1);
  int mx = n;
  map<int, map<int, bool> > q;
  multiset<int> jij;
  for (int i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    y--;
    int h = y + abs(x - k);
    if (q[x][y]) {
      jij.erase(jij.find(h));
      upd(0, 2 * n, 0, h + 1, -1, 1);
      q[x][y] = false;
    } else {
      jij.insert(h);
      upd(0, 2 * n, 0, h + 1, 1, 1);
      q[x][y] = true;
    }
    mx = 0;
    if (!jij.empty()) mx = (*jij.rbegin()) + 1;
    if (mx > 2 * n) return 0;
    cout << get(0, 2 * n, 0, mx, 1) << '\n';
  }
  return 0;
}
