#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
const int inf = 1e9 + 7;
int read() {
  int s = 0;
  char c = getchar(), lc = '+';
  while (c < '0' || '9' < c) lc = c, c = getchar();
  while ('0' <= c && c <= '9') s = s * 10 + c - '0', c = getchar();
  return lc == '-' ? -s : s;
}
void write(int x) {
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  if (x < 10)
    putchar(x + '0');
  else {
    write(x / 10);
    putchar(x % 10 + '0');
  }
}
void print(int x, char c = '\n') {
  write(x);
  putchar(c);
}
set<int> L[N], R[N];
struct node {
  bool no;
  int minL, maxR;
  node(int x = inf, int y = -inf) { no = x <= y, minL = x, maxR = y; }
} t[N * 4];
node operator+(const node &a, const node &b) {
  node ret;
  ret.minL = min(a.minL, b.minL);
  ret.maxR = max(a.maxR, b.maxR);
  ret.no = a.no || b.no || a.minL <= b.maxR;
  return ret;
}
void rebuild(int w, int l, int r, int x) {
  if (l == r) {
    int minL, maxR;
    if (L[x].empty())
      minL = inf;
    else
      minL = *L[x].begin();
    if (R[x].empty())
      maxR = -inf;
    else
      maxR = *R[x].rbegin();
    return void(t[w] = node(minL, maxR));
  }
  if (x <= ((l + r) / 2))
    rebuild((w * 2), l, ((l + r) / 2), x);
  else
    rebuild((w * 2 + 1), ((l + r) / 2) + 1, r, x);
  t[w] = t[(w * 2)] + t[(w * 2 + 1)];
}
signed main(signed Recall, char *_902_[]) {
  (void)Recall, (void)_902_;
  int n = read(), m = read(), q = read();
  (void)m;
  while (q--) {
    int x = read(), y = read(), is = x & 1;
    x = (x + 1) / 2, y = (y + 1) / 2;
    if (is) {
      if (L[x].find(y) == L[x].end())
        L[x].insert(y);
      else
        L[x].erase(y);
    } else {
      if (R[x].find(y) == R[x].end())
        R[x].insert(y);
      else
        R[x].erase(y);
    }
    rebuild(1, 1, n, x);
    puts(t[1].no ? "NO" : "YES");
  }
  return 0;
}
