#include <bits/stdc++.h>
const int maxn = 2e5 + 5;
using namespace std;
int rd() {
  int x = 0, f = 1;
  char c = getchar();
  while (!isdigit(c)) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (isdigit(c)) x = (x << 3) + (x << 1) + c - '0', c = getchar();
  return x * f;
}
set<int> L[maxn], R[maxn];
map<pair<int, int>, bool> mp;
int n, m, q;
struct Segment_tree {
  int mx[maxn << 2], mi[maxn << 2], able[maxn << 2];
  void init() {
    for (int i = 1; i <= (n << 2); i++) mx[i] = 0, mi[i] = m + 1;
  }
  void pushup(int p) {
    mx[p] = max(mx[(p << 1)], mx[(p << 1 | 1)]);
    mi[p] = min(mi[(p << 1)], mi[(p << 1 | 1)]);
    able[p] = able[(p << 1)] | able[(p << 1 | 1)] |
              (mx[(p << 1 | 1)] >= mi[(p << 1)]);
  }
  void modify(int p, int l, int r, int x) {
    if (l == r) {
      mx[p] = R[x].size() ? *R[x].rbegin() : 0;
      mi[p] = L[x].size() ? *L[x].begin() : m + 1;
      able[p] = (mx[p] >= mi[p]);
      return;
    }
    int mid = (l + r) >> 1;
    if (x <= mid)
      modify((p << 1), l, mid, x);
    else
      modify((p << 1 | 1), mid + 1, r, x);
    pushup(p);
  }
} T;
void solve(int x, int y) {
  if (mp[make_pair(x, y)]) {
    if (y & 1)
      R[x >> 1].erase(y >> 1);
    else
      L[x >> 1].erase(y >> 1);
  } else {
    if (y & 1)
      R[x >> 1].insert(y >> 1);
    else
      L[x >> 1].insert(y >> 1);
  }
  mp[make_pair(x, y)] ^= 1;
  T.modify(1, 1, n, x >> 1);
  puts(T.able[1] ? "NO" : "YES");
}
int main() {
  n = rd();
  m = rd();
  q = rd();
  T.init();
  for (int x, y; q; q--) x = rd() + 1, y = rd() + 1, solve(x, y);
  return 0;
}
