#include <bits/stdc++.h>
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
using namespace std;
template <class T1, class T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &p) {
  os << "{" << p.first << "," << p.second << "}";
  return os;
}
const int N = 4e5 + 5;
const int oo = 1e9 + 7;
struct _dat {
  int ly, ry;
  bool pos;
};
_dat d[N << 2];
set<int> st[N];
void combine(int u) {
  int l = u << 1;
  int r = u << 1 | 1;
  d[u].ly = min(d[l].ly, d[r].ly);
  d[u].ry = max(d[l].ry, d[r].ry);
  d[u].pos = d[l].pos and d[r].pos and d[l].ly > d[r].ry;
}
void create(int u, int x) {
  if (x % 2)
    st[x].insert(oo);
  else
    st[x].insert(0);
  d[u].ly = oo;
  d[u].ry = 0;
  d[u].pos = 1;
}
void update(int u, int ss, int se, int x, int y) {
  if (se < x or x < ss) return;
  if (ss == se) {
    assert(ss == x);
    if (st[x].find(y) == st[x].end())
      st[x].insert(y);
    else
      st[x].erase(y);
    if (x % 2)
      d[u].ly = *st[x].begin();
    else
      d[u].ry = *st[x].rbegin();
  } else {
    int mid = (ss + se) / 2;
    update(u << 1, ss, mid, x, y);
    update(u << 1 | 1, mid + 1, se, x, y);
    combine(u);
  }
}
void build(int u, int ss, int se) {
  if (ss == se) {
    create(u, ss);
  } else {
    int mid = (ss + se) / 2;
    build(u << 1, ss, mid);
    build(u << 1 | 1, mid + 1, se);
    combine(u);
  }
}
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n, m, q;
  cin >> n >> m >> q;
  build(1, 1, n * 2);
  while (q--) {
    int i, j;
    cin >> i >> j;
    update(1, 1, n * 2, i, j);
    cout << (d[1].pos ? "YES\n" : "NO\n");
  }
}
