#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
struct node {
  int val[2];
  int kt;
};
node ST[4 * N];
int n, m, q;
multiset<int> cur[N][2];
map<pair<int, int>, int> vis;
node mer(node a, node b) {
  node res;
  res.val[0] = min(a.val[0], b.val[0]);
  res.val[1] = max(a.val[1], b.val[1]);
  res.kt = max(a.kt, b.kt);
  if (a.val[0] <= b.val[1]) res.kt = 1;
  return res;
}
void update(int id, int l, int r, int pos, int x, int type) {
  if (pos < l || pos > r) return;
  if (l == r) {
    ST[id].val[type] = x;
    return;
  }
  int mid = (l + r) / 2;
  update(id * 2, l, mid, pos, x, type);
  update(id * 2 + 1, mid + 1, r, pos, x, type);
  ST[id] = mer(ST[id * 2], ST[id * 2 + 1]);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> n >> m >> q;
  for (int i = 1; i < 4 * N; i++) {
    ST[i].val[0] = 1e9;
    ST[i].val[1] = -1e9;
    ST[i].kt = 0;
  }
  while (q--) {
    int i, j, type;
    cin >> i >> j;
    int x = (i - 1) / 2 + 1;
    int y = (j - 1) / 2 + 1;
    if (i % 2)
      type = 0;
    else
      type = 1;
    if (vis[make_pair(i, j)]) {
      cur[x][type].erase(cur[x][type].find(y));
      if (type == 0) {
        if (cur[x][0].size())
          update(1, 1, n + 1, x, *cur[x][0].begin(), 0);
        else
          update(1, 1, n + 1, x, 1e9, 0);
      } else {
        if (cur[x][1].size())
          update(1, 1, n + 1, x + 1, *cur[x][1].rbegin(), 1);
        else
          update(1, 1, n + 1, x + 1, -1e9, 1);
      }
    } else {
      cur[x][type].insert(y);
      if (type == 0)
        update(1, 1, n + 1, x, *cur[x][0].begin(), 0);
      else
        update(1, 1, n + 1, x + 1, *cur[x][1].rbegin(), 1);
    }
    vis[make_pair(i, j)] ^= 1;
    if (ST[1].kt)
      cout << "NO";
    else
      cout << "YES";
    cout << '\n';
  }
}
