#include <bits/stdc++.h>
using namespace std;
const int INF = 1 << 30;
const int mod = 1000000007;
int lowbit(int x) { return x & (-x); }
int fast_power(int a, int b) {
  int x;
  for (x = 1; b; b >>= 1) {
    if (b & 1) x = 1ll * x * a % mod;
    a = 1ll * a * a % mod;
  }
  return x % mod;
}
struct node {
  int l, r, mn, mx, res;
} tree[200005 << 2];
set<int> lset[200005], rset[200005];
map<pair<int, int>, int> Map;
int n, m;
void pushup(int q) {
  tree[q].mx = max(tree[q << 1].mx, tree[q << 1 | 1].mx);
  tree[q].mn = min(tree[q << 1].mn, tree[q << 1 | 1].mn);
  tree[q].res = tree[q << 1].res || tree[q << 1 | 1].res ||
                tree[q << 1 | 1].mx >= tree[q << 1].mn;
}
void build(int q, int l, int r) {
  tree[q].l = l;
  tree[q].r = r;
  if (l == r) {
    tree[q].mx = 0;
    tree[q].mn = m + 1;
    return;
  }
  int mid = (l + r) >> 1;
  build(q << 1, l, mid);
  build(q << 1 | 1, mid + 1, r);
  pushup(q);
}
void update(int q, int x) {
  if (tree[q].l > x || tree[q].r < x) return;
  if (tree[q].l == x && tree[q].r == x) {
    if (((int)rset[x].size()))
      tree[q].mx = *rset[x].rbegin();
    else
      tree[q].mx = 0;
    if (((int)lset[x].size()))
      tree[q].mn = *lset[x].begin();
    else
      tree[q].mn = m + 1;
    tree[q].res = tree[q].mx >= tree[q].mn;
    return;
  }
  update(q << 1, x);
  update(q << 1 | 1, x);
  pushup(q);
}
int main() {
  int t;
  scanf("%d%d%d", &n, &m, &t);
  build(1, 1, n);
  for (int i = 1; i <= t; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    x++, y++;
    if (Map[make_pair(x, y)]) {
      if (y & 1)
        rset[x >> 1].erase(y >> 1);
      else
        lset[x >> 1].erase(y >> 1);
    } else {
      if (y & 1)
        rset[x >> 1].insert(y >> 1);
      else
        lset[x >> 1].insert(y >> 1);
    }
    Map[make_pair(x, y)] ^= 1;
    update(1, x >> 1);
    if (tree[1].res)
      puts("NO");
    else
      puts("YES");
  }
  return 0;
}
