#include <bits/stdc++.h>
#pragma GCC optimize(3)
#pragma GCC optimize(2)
const int P = 998244353;
using namespace std;
inline void ckmax(int &a, int b) { a = max(a, b); }
inline void ckmin(int &a, int b) { a = min(a, b); }
inline void mulmod(int &a, int b) { a = 1ll * a * b % P; }
inline void addmod(int &a, int b) {
  int t = a + b;
  a = (t >= P ? t - P : t);
}
inline int ksm(int a, int b) {
  int ans = 1;
  for (; b; b >>= 1) {
    if (b & 1) ans = 1ll * ans * a % P;
    a = 1ll * a * a % P;
  }
  return ans;
}
inline int inv(int a) { return ksm(a, P - 2); }
inline int read() {
  int num = 0, flag = 1;
  char c = ' ';
  for (; !isdigit(c); c = getchar())
    if (c == '-') flag = -1;
  for (; isdigit(c); num = num * 10 + c - 48, c = getchar())
    ;
  return num * flag;
}
const int MAXN = 5e5 + 5;
int n, m, q;
struct Segment_tree {
  int a[MAXN << 2], mx[MAXN << 2];
  void pushdown(int k) {
    if (mx[k]) {
      ckmax(a[(k << 1)], mx[k]);
      ckmax(a[(k << 1 | 1)], mx[k]);
      ckmax(mx[(k << 1)], mx[k]);
      ckmax(mx[(k << 1 | 1)], mx[k]);
    }
    mx[k] = 0;
  }
  void update(int k, int l, int r, int ql, int qr, int v) {
    if (l == ql && r == qr) return ckmax(a[k], v), ckmax(mx[k], v);
    pushdown(k);
    if (qr <= ((l + r) >> 1))
      update((k << 1), l, ((l + r) >> 1), ql, qr, v);
    else if (((l + r) >> 1) < ql)
      update((k << 1 | 1), ((l + r) >> 1) + 1, r, ql, qr, v);
    else {
      update((k << 1), l, ((l + r) >> 1), ql, ((l + r) >> 1), v);
      update((k << 1 | 1), ((l + r) >> 1) + 1, r, ((l + r) >> 1) + 1, qr, v);
    }
    a[k] = max(a[(k << 1)], a[(k << 1 | 1)]);
  }
  int query(int k, int l, int r, int pos) {
    if (l == r) return a[k];
    pushdown(k);
    return pos <= ((l + r) >> 1)
               ? query((k << 1), l, ((l + r) >> 1), pos)
               : query((k << 1 | 1), ((l + r) >> 1) + 1, r, pos);
  }
} tr[2];
signed main() {
  cin >> n >> m >> q;
  int res = 1;
  for (register int i = (1); i <= (q); i++) {
    int x = read(), y = read(), st = 0;
    if (x % 2 != 0) st = 1;
    x = (x + 1) / 2, y = (y + 1) / 2;
    if (st == 0) {
      if (m - tr[1].query(1, 1, n, x) + 1 <= y) res = 0;
      tr[0].update(1, 1, n, 1, x, y);
    } else {
      if (tr[0].query(1, 1, n, x) >= y) res = 0;
      tr[1].update(1, 1, n, x, n, m - y + 1);
    }
    printf(res == 1 ? "YES\n" : "NO\n");
  }
  return 0;
}
