#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5, M = 5 * N;
int bit[M];
int get(int x) {
  int r = 0;
  for (; x; x -= x & -x) r += bit[x];
  return r;
}
void add(int x, int v) {
  for (; x < M; x += x & -x) bit[x] += v;
}
int find(int x) {
  int id = 0;
  for (int b = 1 << 20; b; b >>= 1) {
    int now = id + b;
    if (now >= M) continue;
    if (bit[now] <= x) {
      id = now;
      x -= bit[now];
    }
  }
  return id;
}
int ans[N];
void dnc(vector<tuple<int, int, int>>& events, int l, int r, int maxi = -1) {
  vector<int> removed;
  for (auto& it : events) {
    int s, e, pos;
    tie(s, e, pos) = it;
    if (s <= l && r <= e) {
      int cnt = get(pos - 1);
      int res = find(cnt) + 1;
      removed.push_back(res);
      maxi = max(maxi, res);
      add(res, -1);
    }
  }
  if (r - l < 2) {
    ans[l] = maxi;
  } else {
    vector<tuple<int, int, int>> lef, rig;
    int mid = (l + r) >> 1;
    for (auto& it : events) {
      int s, e, pos;
      tie(s, e, pos) = it;
      if (s <= l && r <= e) continue;
      if (s < mid) lef.push_back(it);
      if (e > mid) rig.push_back(it);
    }
    dnc(lef, l, mid, maxi);
    dnc(rig, mid, r, maxi);
  }
  for (int x : removed) {
    add(x, +1);
  }
}
int main() {
  int n, k, m;
  scanf("%d %d %d", &n, &k, &m);
  map<pair<int, int>, int> occur;
  vector<tuple<int, int, int>> events;
  for (int i = 0; i < m; ++i) {
    int x, y;
    scanf("%d %d", &x, &y);
    auto now = make_pair(x, y);
    auto it = occur.find(now);
    if (it == occur.end()) {
      occur[now] = i;
    } else {
      int s = y + abs(x - k);
      events.emplace_back(it->second, i, s);
      occur.erase(it);
    }
  }
  for (auto& it : occur) {
    int s = it.first.second + abs(it.first.first - k);
    events.emplace_back(it.second, m, s);
  }
  for (int i = 1; i <= 2 * (n + m); ++i) add(i, +1);
  dnc(events, 0, m);
  for (int i = 0; i < m; ++i) {
    ans[i] = max(0, ans[i] - n);
    printf("%d\n", ans[i]);
  }
  return 0;
}
