#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC target("sse4")
using namespace std;
constexpr int INF = 1e9 + 9;
int n, m, q;
struct SegTree {
  int n;
  vector<int> mn, mx, failed;
  vector<set<int>> rows;
  SegTree(int n)
      : n(n), rows(n), failed(n * 4), mn(n * 4, INF), mx(n * 4, -INF) {}
  void updateRange(int p, int lo, int hi, int x) {
    if (lo >= hi) {
      mn[p] = INF;
      mx[p] = -INF;
      if (!rows[x].empty()) {
        if (x % 2 == 0) {
          mn[p] = *rows[x].begin();
        } else {
          mx[p] = *rows[x].rbegin();
        }
      }
    } else {
      int m = lo + (hi - lo) / 2;
      if (x <= m) {
        updateRange(p * 2, lo, m, x);
      } else {
        updateRange(p * 2 + 1, m + 1, hi, x);
      }
      mn[p] = min(mn[p * 2], mn[p * 2 + 1]);
      mx[p] = max(mx[p * 2], mx[p * 2 + 1]);
      failed[p] =
          failed[p * 2] || failed[p * 2 + 1] || mn[p * 2] < mx[p * 2 + 1];
    }
  }
  void update(int i, int j) {
    if (rows[i].count(j)) {
      rows[i].erase(j);
    } else {
      rows[i].insert(j);
    }
    updateRange(1, 0, n - 1, i);
  }
};
void solve(int test, istream& in, ostream& out) {
  in >> n >> m >> q;
  SegTree st(2 * n);
  for (int _ = 0; _ < q; ++_) {
    int i, j;
    in >> i >> j;
    i--;
    j--;
    st.update(i, j);
    out << (st.failed[1] ? "NO" : "YES") << endl;
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  istream& in(std::cin);
  ostream& out(std::cout);
  solve(1, in, out);
  return 0;
}
