#include <bits/stdc++.h>
using namespace std;
template <class T1, class T2>
inline void upd1(T1& a, const T2& b) {
  a = a < b ? a : b;
}
template <class T1, class T2>
inline void upd2(T1& a, const T2& b) {
  a = b < a ? a : b;
}
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
struct Ano {
  operator long long() {
    long long x = 0, y = 0, c = getchar();
    while (c < 48) {
      y = c == 45;
      c = getchar();
    }
    while (c > 47) {
      x = x * 10 + c - 48;
      c = getchar();
    }
    return y ? -x : x;
  }
} buf;
const int N = 2e5 + 5;
set<int> f[N], g[N];
struct vec {
  int a, b, s;
} t[N * 4];
vec operator+(vec a, vec b) {
  return {max(a.a, b.a), min(a.b, b.b), a.s && b.s && b.a < a.b};
}
void upd(int u, int i, int j, int k) {
  if (i == j) {
    int a = f[i].empty() ? -1 : *f[i].rbegin();
    int b = g[i].empty() ? N : *g[i].begin();
    t[k] = {a, b, a < b};
  } else {
    if (u < ((i + j >> 1) + 1))
      upd(u, i, (i + j >> 1), (k << 1));
    else
      upd(u, ((i + j >> 1) + 1), j, ((k << 1) ^ 1));
    t[k] = t[(k << 1)] + t[((k << 1) ^ 1)];
  }
}
int main() {
  int n = buf, m = buf, q = buf;
  for (int i = 0; i < n; ++i) upd(i, 0, n - 1, 1);
  while (q--) {
    int i = buf - 1, j = buf - 1;
    auto& c = i & 1 ? f : g;
    i /= 2, j /= 2;
    auto p = c[i].find(j);
    if (c[i].end() == p)
      c[i].insert(j);
    else
      c[i].erase(p);
    upd(i, 0, n - 1, 1);
    puts(t[1].s ? "YES" : "NO");
  }
}
