#include <bits/stdc++.h>
using namespace std;
const int N = 4e5 + 10;
int mx[N << 2], tg[N << 2], n, k;
map<int, bool> mp[N / 2];
multiset<int> g;
multiset<int>::iterator it;
void add(int k, int z) {
  mx[k] += z;
  tg[k] += z;
}
void push_d(int k) {
  if (tg[k] == 0) return;
  add(k << 1, tg[k]);
  add(k << 1 | 1, tg[k]);
  tg[k] = 0;
}
void build(int k, int l, int r) {
  mx[k] = r;
  if (l == r) return;
  int mid = l + r >> 1;
  build(k << 1, l, mid);
  build(k << 1 | 1, mid + 1, r);
}
void modify(int k, int l, int r, int x, int y, int z) {
  if (x <= l && r <= y) return add(k, z);
  int mid = l + r >> 1;
  push_d(k);
  if (x <= mid) modify(k << 1, l, mid, x, y, z);
  if (mid < y) modify(k << 1 | 1, mid + 1, r, x, y, z);
  mx[k] = max(mx[k << 1], mx[k << 1 | 1]);
}
int query(int k, int l, int r, int x, int y) {
  if (x <= l && r <= y) return mx[k];
  int mid = l + r >> 1, tp = 0;
  push_d(k);
  if (x <= mid) tp = max(tp, query(k << 1, l, mid, x, y));
  if (mid < y) tp = max(tp, query(k << 1 | 1, mid + 1, r, x, y));
  return tp;
}
void ask() {
  int m = n;
  if (g.size()) it = g.end(), m = max(n, *(--it));
  int t = query(1, 1, 2 * n, 1, m);
  cout << max(0, t - (m + 1)) + (m - n) << '\n';
}
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int q, x, y, t;
  cin >> n >> k >> q;
  build(1, 1, 2 * n);
  while (q--) {
    cin >> x >> y;
    t = y + abs(x - k);
    if (mp[x][y]) {
      mp[x][y] = 0;
      g.erase(g.find(t));
      modify(1, 1, 2 * n, 1, t, -1);
    } else {
      mp[x][y] = 1;
      g.insert(t);
      modify(1, 1, 2 * n, 1, t, 1);
    }
    ask();
  }
  return 0;
}
