#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
set<int> L[N], R[N];
set<int>::iterator it;
int tr[2][N * 4], flag[N * 4];
void build(int x, int l, int r) {
  if (l == r) {
    tr[0][x] = N;
    tr[1][x] = 0;
    return;
  }
  int mid = (l + r) >> 1;
  build(x * 2, l, mid);
  build(x * 2 + 1, mid + 1, r);
  tr[0][x] = min(tr[0][x * 2], tr[0][x * 2 + 1]);
  tr[1][x] = max(tr[1][x * 2], tr[1][x * 2 + 1]);
}
void update(int opt, int x, int l, int r, int pos, int v) {
  if (l == r) {
    tr[opt][x] = v;
    if (tr[0][x] <= tr[1][x])
      flag[x] = 1;
    else
      flag[x] = 0;
    return;
  }
  int mid = (l + r) >> 1;
  if (pos <= mid)
    update(opt, x * 2, l, mid, pos, v);
  else
    update(opt, x * 2 + 1, mid + 1, r, pos, v);
  if (!opt)
    tr[opt][x] = min(tr[opt][x * 2], tr[opt][x * 2 + 1]);
  else
    tr[opt][x] = max(tr[opt][x * 2], tr[opt][x * 2 + 1]);
  if (flag[x * 2] || flag[x * 2 + 1] || tr[0][x * 2] <= tr[1][x * 2 + 1])
    flag[x] = 1;
  else
    flag[x] = 0;
}
int main() {
  int n, m, q, x, y;
  scanf("%d%d%d", &n, &m, &q);
  build(1, 1, n);
  for (int i = 1; i <= n; i++) L[i].insert(N), R[i].insert(0);
  for (int i = 1; i <= q; i++) {
    scanf("%d%d", &x, &y);
    if (x % 2 == 1 && y % 2 == 1) {
      x = x / 2 + 1;
      y = y / 2 + 1;
      if (L[x].find(y) != L[x].end())
        L[x].erase(y);
      else
        L[x].insert(y);
      it = L[x].begin();
      update(0, 1, 1, n, x, *it);
      if (!flag[1])
        printf("YES\n");
      else
        printf("NO\n");
    } else if (x % 2 == 0 && y % 2 == 0) {
      x /= 2;
      y /= 2;
      if (R[x].find(y) != R[x].end())
        R[x].erase(y);
      else
        R[x].insert(y);
      it = R[x].end();
      it--;
      update(1, 1, 1, n, x, *it);
      if (!flag[1])
        printf("YES\n");
      else
        printf("NO\n");
    }
  }
  return 0;
}
