#include <bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr ll INF = (ll)1e18;
constexpr ll MOD = (ll)1e9 + 7;
constexpr double EPS = 1e-9;
constexpr ll dx[4] = {1, 0, -1, 0};
constexpr ll dy[4] = {0, 1, 0, -1};
constexpr ll dx8[8] = {1, 0, -1, 0, 1, 1, -1, -1};
constexpr ll dy8[8] = {0, 1, 0, -1, 1, -1, 1, -1};
void p() { std::cout << '\n'; }
template <typename Head, typename... Tail>
void p(Head head, Tail... tail) {
  std::cout << head << (sizeof...(tail) ? " " : "");
  p(tail...);
}
template <typename T>
inline void pv(std::vector<T>& v) {
  for (ll i = 0, N = v.size(); i < N; i++)
    std::cout << v[i] << " \n"[i == N - 1];
}
template <typename T>
inline bool chmax(T& a, T b) {
  return a < b && (a = b, true);
}
template <typename T>
inline bool chmin(T& a, T b) {
  return a > b && (a = b, true);
}
template <typename T>
inline void uniq(std::vector<T>& v) {
  v.erase(std::unique(v.begin(), v.end()), v.end());
}
template <typename Monoid, typename F>
class SegmentTree {
 public:
  ll sz;
  vector<Monoid> seg;
  const F f;
  const Monoid M1;
  SegmentTree(ll n, const F f, const Monoid& M1) : f(f), M1(M1) {
    sz = 1;
    while (sz < n) sz <<= 1;
    seg.assign(2 * sz, M1);
  }
  void set(ll k, const Monoid& x) { seg[k + sz] = x; }
  void build() {
    for (ll k = sz - 1; k > 0; k--) {
      seg[k] = f(seg[2 * k + 0], seg[2 * k + 1]);
    }
  }
  void update(ll k, const Monoid& x) {
    k += sz;
    seg[k] = x;
    while (k >>= 1) {
      seg[k] = f(seg[2 * k + 0], seg[2 * k + 1]);
    }
  }
  Monoid query(ll a, ll b) {
    Monoid L = M1, R = M1;
    for (a += sz, b += sz; a < b; a >>= 1, b >>= 1) {
      if (a & 1) L = f(L, seg[a++]);
      if (b & 1) R = f(seg[--b], R);
    }
    return f(L, R);
  }
  Monoid operator[](const ll& k) const { return seg[k + sz]; }
  template <typename C>
  ll find_subtree(ll a, const C& check, Monoid& M, bool type) {
    while (a < sz) {
      Monoid nxt = type ? f(seg[2 * a + type], M) : f(M, seg[2 * a + type]);
      if (check(nxt))
        a = 2 * a + type;
      else
        M = nxt, a = 2 * a + 1 - type;
    }
    return a - sz;
  }
  template <typename C>
  ll find_first(ll a, const C& check) {
    Monoid L = M1;
    if (a <= 0) {
      if (check(f(L, seg[1]))) return find_subtree(1, check, L, false);
      return -1;
    }
    ll b = sz;
    for (a += sz, b += sz; a < b; a >>= 1, b >>= 1) {
      if (a & 1) {
        Monoid nxt = f(L, seg[a]);
        if (check(nxt)) return find_subtree(a, check, L, false);
        L = nxt;
        ++a;
      }
    }
    return -1;
  }
  template <typename C>
  ll find_last(ll b, const C& check) {
    Monoid R = M1;
    if (b >= sz) {
      if (check(f(seg[1], R))) return find_subtree(1, check, R, true);
      return -1;
    }
    ll a = sz;
    for (b += sz; a < b; a >>= 1, b >>= 1) {
      if (b & 1) {
        Monoid nxt = f(seg[--b], R);
        if (check(nxt)) return find_subtree(b, check, R, true);
        R = nxt;
      }
    }
    return -1;
  }
};
template <typename Monoid, typename F>
std::ostream& operator<<(std::ostream& s, SegmentTree<Monoid, F>& seg) {
  for (ll i = 0; i < seg.sz; i++) s << seg[i] << "\t\n"[i == seg.sz - 1];
  return s;
}
void solve() {
  ll N, M, Q;
  cin >> N >> M >> Q;
  vector<ll> a(Q), b(Q);
  for (ll i = 0, i_length = (Q); i < i_length; ++i) cin >> a[i] >> b[i];
  auto F = [](ll x, ll y) { return min(x, y); };
  auto G = [](ll x, ll y) { return max(x, y); };
  SegmentTree<ll, decltype(F)> seg0(2 * N + 1, F, INF);
  SegmentTree<ll, decltype(G)> seg1(2 * N + 1, G, -INF);
  vector<bool> ok(Q, false);
  for (ll i = 0, i_length = (Q); i < i_length; ++i) {
    if (a[i] % 2 == 1) {
      ll t = seg1.query(a[i], 2 * N + 2);
      do {
      } while (false);
      if (t >= b[i]) break;
      ok[i] = true;
      seg0.update(a[i], min(b[i], seg0[a[i]]));
      do {
      } while (false);
    } else {
      ll t = seg0.query(0, a[i]);
      do {
      } while (false);
      if (t <= b[i]) break;
      ok[i] = true;
      seg1.update(a[i], max(b[i], seg1[a[i]]));
      do {
      } while (false);
    }
  }
  for (ll i = 0, i_length = (Q); i < i_length; ++i) {
    if (ok[i])
      p("YES");
    else
      p("NO");
  }
}
signed main() {
  solve();
  return 0;
}
