#include <bits/stdc++.h>
using namespace std;
const int st_size = 2000005, maxn = 200005;
int cur_state = 1, mn[st_size], mx[st_size], arr[2 * maxn], state[2 * maxn],
    ans[2 * maxn], ep, n, m, q;
pair<int, int> maxp[2 * maxn], minp[2 * maxn];
vector<pair<int, int> > point[st_size];
map<pair<int, int>, int> event;
void update_max(int i, int l, int r, int pos, int val) {
  if (l > pos or pos > r) return;
  if (l == r) {
    mx[i] = val;
  } else {
    int mid = (l + r) / 2;
    update_max(2 * i, l, mid, pos, val);
    update_max(2 * i + 1, mid + 1, r, pos, val);
    mx[i] = max(mx[2 * i], mx[2 * i + 1]);
  }
}
void update_min(int i, int l, int r, int pos, int val) {
  if (l > pos or pos > r) return;
  if (l == r) {
    mn[i] = val;
  } else {
    int mid = (l + r) / 2;
    update_min(2 * i, l, mid, pos, val);
    update_min(2 * i + 1, mid + 1, r, pos, val);
    mn[i] = min(mn[2 * i], mn[2 * i + 1]);
  }
}
int get_max(int i, int l, int r, int ll, int rr) {
  if (l > rr or ll > r) return INT_MIN;
  if (ll <= l and r <= rr) {
    return mx[i];
  } else {
    int mid = (l + r) / 2;
    return max(get_max(2 * i, l, mid, ll, rr),
               get_max(2 * i + 1, mid + 1, r, ll, rr));
  }
}
int get_min(int i, int l, int r, int ll, int rr) {
  if (l > rr or ll > r) return INT_MAX;
  if (ll <= l and r <= rr) {
    return mn[i];
  } else {
    int mid = (l + r) / 2;
    return min(get_min(2 * i, l, mid, ll, rr),
               get_min(2 * i + 1, mid + 1, r, ll, rr));
  }
}
void dfs(int i, int l, int r) {
  for (auto p : point[i]) {
    ep++;
    int x = p.first, y = p.second;
    state[ep] = cur_state;
    if (x & 1) {
      maxp[ep] = {-1, -1};
      minp[ep] = {x, arr[x]};
      arr[x] = min(arr[x], y);
      update_min(1, 1, 2 * n, x, arr[x]);
      if (get_max(1, 1, 2 * n, x + 1, 2 * n) > y) cur_state = 0;
    } else {
      maxp[ep] = {x, arr[x]};
      minp[ep] = {-1, -1};
      arr[x] = max(arr[x], y);
      update_max(1, 1, 2 * n, x, arr[x]);
      if (get_min(1, 1, 2 * n, 1, x - 1) < y) cur_state = 0;
    }
  }
  if (l == r) {
    ans[l] = cur_state;
  } else {
    int mid = (l + r) / 2;
    dfs(2 * i, l, mid);
    dfs(2 * i + 1, mid + 1, r);
  }
  for (auto p : point[i]) {
    cur_state = state[ep];
    if (maxp[ep].first != -1) {
      update_max(1, 1, 2 * n, maxp[ep].first, maxp[ep].second);
      arr[maxp[ep].first] = maxp[ep].second;
    }
    if (minp[ep].first != -1) {
      update_min(1, 1, 2 * n, minp[ep].first, minp[ep].second);
      arr[minp[ep].first] = minp[ep].second;
    }
    ep--;
  }
}
void add_query(int i, int l, int r, int ll, int rr, pair<int, int> p) {
  if (l > rr or ll > r) return;
  if (ll <= l and r <= rr)
    point[i].emplace_back(p);
  else {
    int mid = (l + r) / 2;
    add_query(2 * i, l, mid, ll, rr, p);
    add_query(2 * i + 1, mid + 1, r, ll, rr, p);
  }
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> n >> m >> q;
  for (int i = 0; i < st_size; i++) {
    mx[i] = INT_MIN;
    mn[i] = INT_MAX;
  }
  for (int i = 0; i < 2 * maxn; i++) {
    arr[i] = (i & 1) ? INT_MAX : INT_MIN;
  }
  for (int i = 1; i <= q; i++) {
    int x, y;
    cin >> x >> y;
    if (!event.count({x, y}))
      event[{x, y}] = i;
    else {
      int j = event[{x, y}];
      event.erase({x, y});
      add_query(1, 1, q, j, i - 1, make_pair(x, y));
    }
  }
  for (auto lft : event) {
    int x = lft.first.first, y = lft.first.second, j = lft.second;
    add_query(1, 1, q, j, q, make_pair(x, y));
  }
  dfs(1, 1, q);
  for (int i = 1; i <= q; i++) cout << (ans[i] ? "YES" : "NO") << "\n";
}
