#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
const long long maxn = 5e5 + 100;
const long long inf = 1e15;
long long n, m, k, t, h;
struct vertex {
  long long mx = -inf;
  ;
  long long mn = inf;
  bool good = 1;
  bool operator==(vertex other) {
    return mx == other.mx && mn == other.mn && good == other.good;
  }
};
set<long long> SMN[maxn];
set<long long> SMX[maxn];
template <typename T>
struct segtree {
  long long n;
  T zero;
  inline T mrg(T a, T b) {
    T ans;
    ans.mx = max(a.mx, b.mx);
    ans.mn = min(a.mn, b.mn);
    ans.good = a.good && b.good && (a.mn > b.mx);
    return ans;
  }
  inline void add(T &a, long long b, bool f) {
    if (f) {
      a.mx = b;
    } else {
      a.mn = b;
    }
    a.good = (a.mx < a.mn);
  }
  vector<T> V;
  segtree(long long n_, T zero_ = 0) {
    n = n_;
    V.resize(4 * n_ + 7);
    zero = zero_;
  }
  inline void build(long long v, long long tl, long long tr) {
    if (tl == tr) {
      return;
    }
    long long tm = (tl + tr) / 2;
    build(2 * v, tl, tm);
    build(2 * v + 1, tm + 1, tr);
    V[v] = mrg(V[2 * v], V[2 * v + 1]);
  }
  inline void build() { build(1, 0, n - 1); }
  inline void update(long long v, long long tl, long long tr, long long i,
                     long long color, bool f) {
    if (i < tl || i > tr) {
      return;
    }
    if (tl == tr) {
      add(V[v], color, f);
      return;
    }
    long long tm = (tl + tr) / 2;
    update(2 * v, tl, tm, i, color, f);
    update(2 * v + 1, tm + 1, tr, i, color, f);
    V[v] = mrg(V[2 * v], V[2 * v + 1]);
  }
  inline T getans(long long v, long long tl, long long tr, long long l,
                  long long r) {
    if (l > tr || tl > r || l > r) {
      return zero;
    }
    if (tl == l && tr == r) {
      return V[v];
    }
    long long tm = (tl + tr) / 2;
    T ans1 = getans(2 * v, tl, tm, l, min(r, tm));
    T ans2 = getans(2 * v + 1, tm + 1, tr, max(l, tm + 1), r);
    return mrg(ans1, ans2);
  }
  inline void update(long long i, long long color, bool f) {
    update(1, 0, n - 1, i, color, f);
  }
  inline T getans(long long l, long long r) {
    T ans = getans(1, 0, n - 1, l, r);
    return ans;
  }
};
int main() {
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  long long q, w, e, a, b;
  vertex zero;
  cin >> n >> m >> k;
  for (q = 0; q < n; q++) {
    SMN[q].insert(inf);
    SMX[q].insert(-inf);
  }
  segtree<vertex> st(n, zero);
  for (q = 0; q < k; q++) {
    cin >> a >> b;
    a--;
    b--;
    long long c = 1 - a % 2;
    a /= 2;
    b /= 2;
    if (c == 0) {
      if (SMX[a].find(b) == SMX[a].end()) {
        SMX[a].insert(b);
      } else {
        SMX[a].erase(b);
      }
      long long mx = (*--SMX[a].end());
      st.update(a, mx, 1);
    } else {
      if (SMN[a].find(b) == SMN[a].end()) {
        SMN[a].insert(b);
      } else {
        SMN[a].erase(b);
      }
      long long mn = (*SMN[a].begin());
      st.update(a, mn, 0);
    }
    vertex ans = st.getans(0, n - 1);
    if (ans.good) {
      cout << "YES" << endl;
    } else {
      cout << "NO" << endl;
    }
  }
  return 0;
}
