#include <bits/stdc++.h>
using namespace std;
struct SegmentTree {
  int dat, l, r;
} t[200002 * 4];
int n, m, q, i, cnt;
map<pair<int, int>, int> d;
set<pair<int, int> > sl, sr;
int read() {
  char c = getchar();
  int w = 0;
  while (c < '0' || c > '9') c = getchar();
  while (c <= '9' && c >= '0') {
    w = w * 10 + c - '0';
    c = getchar();
  }
  return w;
}
void build(int p, int l, int r) {
  t[p].dat = 1;
  t[p].l = m + 1;
  if (l == r) return;
  int mid = (l + r) / 2;
  build(p * 2, l, mid);
  build(p * 2 + 1, mid + 1, r);
}
void update(int p) {
  t[p].l = min(t[p * 2].l, t[p * 2 + 1].l);
  t[p].r = max(t[p * 2].r, t[p * 2 + 1].r);
  t[p].dat = (t[p * 2].dat && t[p * 2 + 1].dat && t[p * 2].l > t[p * 2 + 1].r);
}
void change1(int p, int l, int r, int x, int v, int op) {
  if (l == r) {
    if (op == 0)
      t[p].l = min(t[p].l, v);
    else
      t[p].l = v;
    if (t[p].l <= t[p].r)
      t[p].dat = 0;
    else
      t[p].dat = 1;
    return;
  }
  int mid = (l + r) / 2;
  if (x <= mid)
    change1(p * 2, l, mid, x, v, op);
  else
    change1(p * 2 + 1, mid + 1, r, x, v, op);
  update(p);
}
void change2(int p, int l, int r, int x, int v, int op) {
  if (l == r) {
    if (op == 0)
      t[p].r = max(t[p].r, v);
    else
      t[p].r = v;
    if (t[p].l <= t[p].r)
      t[p].dat = 0;
    else
      t[p].dat = 1;
    return;
  }
  int mid = (l + r) / 2;
  if (x <= mid)
    change2(p * 2, l, mid, x, v, op);
  else
    change2(p * 2 + 1, mid + 1, r, x, v, op);
  update(p);
}
int main() {
  n = read();
  m = read();
  q = read();
  build(1, 1, n);
  for (i = 1; i <= q; i++) {
    int x = read(), y = read();
    pair<int, int> p = make_pair((x + 1) / 2, (y + 1) / 2);
    if (x % 2 == 1) {
      if (d[p] == 0) {
        d[p] = 1;
        sr.insert(p);
        change1(1, 1, n, p.first, p.second, 0);
      } else if (d[p] == 1) {
        d[p] = 0;
        set<pair<int, int> >::iterator it =
            sr.lower_bound(make_pair(p.first - 1, m + 1));
        if ((*it) == p) {
          it++;
          if (it == sr.end() || (*it).first != p.first)
            change1(1, 1, n, p.first, m + 1, 1);
          else
            change1(1, 1, n, p.first, (*it).second, 1);
        }
        sr.erase(p);
      } else if (d[p] == 3) {
        d[p] = 2;
        sl.insert(p);
        cnt--;
        change2(1, 1, n, p.first, p.second, 0);
      } else {
        d[p] = 3;
        cnt++;
        set<pair<int, int> >::iterator it =
            sl.lower_bound(make_pair(p.first, p.second + 1));
        if (it == sl.end() || (*it).first != p.first) {
          it--;
          if (it == sl.begin() || (*(--it)).first != p.first)
            change2(1, 1, n, p.first, 0, 1);
          else
            change2(1, 1, n, p.first, (*it).second, 1);
        }
        sl.erase(p);
      }
    } else {
      if (d[p] == 0) {
        d[p] = 2;
        sl.insert(p);
        change2(1, 1, n, p.first, p.second, 0);
      } else if (d[p] == 2) {
        d[p] = 0;
        set<pair<int, int> >::iterator it =
            sl.lower_bound(make_pair(p.first, p.second + 1));
        if (it == sl.end() || (*it).first != p.first) {
          it--;
          if (it == sl.begin() || (*(--it)).first != p.first)
            change2(1, 1, n, p.first, 0, 1);
          else
            change2(1, 1, n, p.first, (*it).second, 1);
        }
        sl.erase(p);
      } else if (d[p] == 3) {
        d[p] = 1;
        sr.insert(p);
        cnt--;
        change1(1, 1, n, p.first, p.second, 0);
      } else {
        d[p] = 3;
        cnt++;
        set<pair<int, int> >::iterator it =
            sr.lower_bound(make_pair(p.first - 1, m + 1));
        if ((*it) == p) {
          it++;
          if (it == sr.end() || (*it).first != p.first)
            change1(1, 1, n, p.first, m + 1, 1);
          else
            change1(1, 1, n, p.first, (*it).second, 1);
        }
        sr.erase(p);
      }
    }
    if (cnt != 0 || t[1].dat == 0)
      puts("NO");
    else
      puts("YES");
  }
  return 0;
}
