#include <bits/stdc++.h>
using namespace std;
const int INF = 2000000000;
set<int> a[400005];
set<int> b[400005];
struct Interval {
  int flag, minn, maxx;
};
Interval arbint[1600005];
int n;
Interval create(int value1, int value2) {
  return Interval{
      ((value1 != 0 ? value1 : INF) > (value2 != 0 ? value2 : 0)),
      value1 != 0 ? value1 : INF,
      value2 != 0 ? value2 : 0,
  };
}
Interval join(const Interval &left, const Interval &right) {
  return Interval{
      (left.minn > right.maxx) & (left.flag == 1) & (right.flag == 1),
      min(left.minn, right.minn),
      max(left.maxx, right.maxx),
  };
}
void update(int nod, int st, int dr, int index) {
  if (st == dr) {
    if (a[st].size() == 0) {
      if (b[st].size() == 0)
        arbint[nod] = create(0, 0);
      else
        arbint[nod] = create(0, *(b[st].rbegin()));
    } else {
      if (b[st].size() == 0)
        arbint[nod] = create(*a[st].begin(), 0);
      else
        arbint[nod] = create(*a[st].begin(), *(b[st].rbegin()));
    }
  } else {
    int mij = (st + dr) / 2;
    if (index <= mij)
      update(2 * nod, st, mij, index);
    else
      update(2 * nod + 1, mij + 1, dr, index);
    arbint[nod] = join(arbint[2 * nod], arbint[2 * nod + 1]);
  }
}
void update(int index) { update(1, 1, n, index); }
Interval query(int nod, int st, int dr, int left, int right) {
  if (st == left && dr == right)
    return arbint[nod];
  else {
    int mij = (st + dr) / 2;
    if (right <= mij)
      return query(2 * nod, st, mij, left, right);
    else {
      if (mij < left)
        return query(2 * nod + 1, mij + 1, dr, left, right);
      else
        return join(query(2 * nod, st, mij, left, mij),
                    query(2 * nod + 1, mij + 1, dr, mij + 1, right));
    }
  }
}
Interval query(int left, int right) { return query(1, 1, n, left, right); }
int main() {
  int m, q, i, x, y;
  scanf("%d%d%d", &n, &m, &q);
  n *= 2;
  for (i = 1; i <= 4 * n; i++) {
    arbint[i].minn = INF;
    arbint[i].flag = 1;
  }
  for (i = 1; i <= q; i++) {
    scanf("%d%d", &x, &y);
    set<int>::iterator it;
    if (x % 2 == 1 && y % 2 == 1) {
      it = a[x].find(y);
      if (it != a[x].end()) {
        a[x].erase(it);
        update(x);
      } else {
        a[x].insert(y);
        update(x);
      }
    } else {
      it = b[x - 1].find(y);
      if (it != b[x - 1].end()) {
        b[x - 1].erase(it);
        update(x - 1);
      } else {
        b[x - 1].insert(y);
        update(x - 1);
      }
    }
    if (arbint[1].flag == 1)
      printf("YES\n");
    else
      printf("NO\n");
  }
  return 0;
}
