#include <bits/stdc++.h>
using namespace std;
struct node {
  int mix;
  int miy;
  int sum;
};
const int maxi = 1e6 + 10;
const int sz = 1 << 18;
set<int> st[maxi];
node tree[2 * sz];
int n, m, q;
int x, y;
node merge(node x, node y) {
  node ans;
  ans.mix = min(x.mix, y.mix);
  ans.miy = min(x.miy, y.miy);
  ans.sum = min(x.sum, y.sum);
  ans.sum = min(ans.sum, x.mix + y.miy);
  return ans;
}
void build() {
  for (int i = sz; i < 2 * sz; i++) tree[i] = {m, m, 2 * m};
  for (int i = sz - 1; i > 0; i--)
    tree[i] = merge(tree[2 * i], tree[2 * i + 1]);
}
void update(int x) {
  node nd = tree[sz + (x - 1) / 2];
  int mi = m;
  int ma = m;
  if (x & 1) {
    if (st[x].size()) mi = (*st[x].begin()) / 2;
    if (st[x + 1].size()) ma = m - (*st[x + 1].rbegin()) / 2;
  } else {
    if (st[x].size()) ma = m - (*st[x].rbegin()) / 2;
    if (st[x - 1].size()) mi = (*st[x - 1].begin()) / 2;
  }
  nd = {mi, ma, mi + ma};
  int idx = (x - 1) / 2 + sz;
  tree[idx] = nd;
  idx /= 2;
  while (idx) {
    tree[idx] = merge(tree[2 * idx], tree[2 * idx + 1]);
    idx /= 2;
  }
}
int main() {
  cin >> n >> m >> q;
  build();
  while (q--) {
    int x, y;
    scanf("%d%d", &x, &y);
    if (st[x].find(y) == st[x].end()) {
      st[x].insert(y);
    } else
      st[x].erase(y);
    update(x);
    if (tree[1].sum < m)
      printf("NO\n");
    else
      printf("YES\n");
  }
}
