#include <bits/stdc++.h>
using namespace std;
const int N = 8e5 + 10;
struct Node {
  int sum;
  int free;
  int carry;
  Node() {
    sum = 0;
    free = 1;
    carry = 0;
  }
  Node(int x) {
    sum = x;
    if (x == 0) {
      free = 1;
      carry = 0;
    } else {
      free = 0;
      carry = x - 1;
    }
  }
  Node(int sum_, int free_, int carry_) {
    sum = sum_;
    free = free_;
    carry = carry_;
  }
  friend Node conq(const Node &l, const Node &r) {
    if (l.carry <= r.free) {
      return Node(l.sum + r.sum, l.free + r.free - l.carry, r.carry);
    } else {
      return Node(l.sum + r.sum, l.free, r.carry + l.carry - r.free);
    }
  }
};
namespace ST {
int cnt = 0;
int a[N];
Node t[4 * N];
void pull(int v) { t[v] = conq(t[2 * v + 1], t[2 * v + 2]); }
void build(int v, int l, int r) {
  if (l + 1 == r) {
    t[v] = Node();
  } else {
    int m = (r + l) >> 1;
    build(2 * v + 1, l, m);
    build(2 * v + 2, m, r);
    pull(v);
  }
}
void init() { build(0, 0, N); }
void add(int v, int l, int r, int pos, int val) {
  if (l + 1 == r) {
    cnt += val;
    a[l] += val;
    t[v] = Node(a[l]);
  } else {
    int m = (r + l) >> 1;
    if (pos < m) {
      add(2 * v + 1, l, m, pos, val);
    } else {
      add(2 * v + 2, m, r, pos, val);
    }
    pull(v);
  }
}
void query(int v, int l, int r, int ql, int qr, Node &ans) {
  if (r <= ql || qr <= l) {
    return;
  } else if (ql <= l && r <= qr) {
    ans = conq(ans, t[v]);
  } else {
    int m = (r + l) >> 1;
    query(2 * v + 1, l, m, ql, qr, ans);
    query(2 * v + 2, m, r, ql, qr, ans);
  }
}
int ok(int pref) {
  Node ans;
  query(0, 0, N, 0, pref + 1, ans);
  return ans.carry == 0 && ans.sum == cnt;
}
void add(int pos, int val) { add(0, 0, N, pos, val); }
int solve() {
  int l = -1;
  int r = N - 1;
  while (r - l > 1) {
    int m = (r + l) >> 1;
    if (ok(m)) {
      r = m;
    } else {
      l = m;
    }
  }
  assert(ok(r));
  if (l > 0) assert(!ok(l));
  return r;
}
}  // namespace ST
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  ST::init();
  int n, k, q;
  cin >> n >> k >> q;
  set<pair<int, int>> s;
  while (q--) {
    int x, y;
    cin >> x >> y;
    int pos = y + abs(x - k);
    if (!s.count({x, y})) {
      ST::add(pos, 1);
      s.insert({x, y});
    } else {
      ST::add(pos, -1);
      s.erase({x, y});
    }
    cout << max(0, ST::solve() - n) << '\n';
  }
}
