#include <bits/stdc++.h>
using namespace std;
const long long INF = (long long)1e18 + 10, M = 4e5 + 137;
struct Node {
  int cnt, sp, ext, last, spb;
} seg[4 * M];
Node merge(Node l, Node r) {
  Node res;
  res.cnt = l.cnt + r.cnt;
  res.sp = l.sp + max(r.sp - l.ext, 0);
  res.ext = r.ext + max(l.ext - r.sp, 0);
  if (r.last == -1) {
    res.last = l.last;
    res.spb = l.spb;
  } else {
    res.last = r.last + max(l.ext - r.spb, 0);
    res.spb = l.sp + max(r.spb - l.ext, 0);
  }
  return res;
}
void upd(int id, int b, int e, int x, int y) {
  if (e - b == 1) {
    seg[id].cnt += y;
    seg[id].ext = max(0, seg[id].cnt - 1);
    seg[id].sp = (seg[id].cnt ? 0 : 1);
    seg[id].last = (seg[id].cnt ? b - 1 + seg[id].cnt : -1);
    seg[id].spb = (seg[id].cnt ? 0 : -1);
    return;
  }
  int m = (b + e) / 2;
  if (x < m)
    upd(id * 2, b, m, x, y);
  else
    upd(id * 2 + 1, m, e, x, y);
  seg[id] = merge(seg[id * 2], seg[id * 2 + 1]);
}
void build(int id, int b, int e) {
  if (e - b == 1) {
    seg[id].cnt = 0;
    seg[id].sp = 1;
    seg[id].ext = 0;
    seg[id].last = -1;
    seg[id].spb = -1;
    return;
  }
  int m = (b + e) / 2;
  build(id * 2, b, m);
  build(id * 2 + 1, m, e);
  seg[id] = merge(seg[id * 2], seg[id * 2 + 1]);
}
map<pair<long long, long long>, bool> mp;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n, m, k;
  cin >> n >> k >> m;
  build(1, 1, 2 * n);
  while (m--) {
    long long x, y;
    cin >> x >> y;
    if (mp[{x, y}])
      upd(1, 1, 2 * n, y + abs(x - k), -1);
    else
      upd(1, 1, 2 * n, y + abs(x - k), +1);
    mp[{x, y}] ^= 1;
    cout << max(0ll, seg[1].last - n) << "\n";
  }
}
