#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
inline long long rand(long long x, long long y) {
  return rng() % (y + 1 - x) + x;
}
string inline to_string(char c) {
  string second(1, c);
  return second;
}
template <typename T>
inline T gcd(T a, T b) {
  return a == 0 ? llabs(b) : gcd(b % a, a);
}
using ll = long long;
using ld = long double;
using pi = pair<ll, ll>;
using spi = pair<ll, pi>;
using dpi = pair<pi, pi>;
long long LLINF = 1e18;
int INF = 1e9 + 1e6;
int n, m, q;
pi E[(200006)];
struct u {
  int p[(200006) * 2 - 1], sz[(200006) * 2 - 1];
  bool flip[(200006) * 2 - 1];
  stack<int> stk;
  bool bp = 1;
  u() {
    for (ll i = 0; i <= ll((200006) * 2 - 1); ++i)
      p[i] = i, sz[i] = 1, flip[i] = 0;
    while (stk.size()) stk.pop();
    bp = 1;
  }
  void merge(int x, int y, int ind) {
    x = find(x), y = find(y);
    if (x == y) {
      stk.emplace(-1);
      return;
    }
    if (sz[x] > sz[y]) swap(x, y);
    p[x] = y, sz[y] += sz[x], stk.emplace(x);
    if (bp && gg(ind)) flip[stk.top()] = 1, bp = 0;
  }
  int find(int x) { return p[x] == x ? x : find(p[x]); }
  void merge(int a) {
    int x = E[a].first, y = E[a].second;
    merge(x << 1, y << 1 | 1, a), merge(x << 1 | 1, y << 1, a);
    if (gg(a)) assert(!bp);
  }
  bool gg(int x) { return find(E[x].first << 1) == find(E[x].first << 1 | 1); }
  void undo() { undo_2(), undo_2(); }
  void undo_2() {
    int x = stk.top();
    stk.pop();
    if (~x) {
      sz[p[x]] -= sz[x], p[x] = x;
      if (flip[x]) bp ^= 1, flip[x] = 0;
    }
  }
} u;
int last[(200006)];
struct event {
  int type, ind;
};
vector<event> v, tmp[2];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> m >> q;
  for (ll i = 1; i <= ll(m); ++i) cin >> E[i].first >> E[i].second;
  auto push = [&](int ind) {
    v.push_back({0, ind});
    u.merge(ind);
  };
  int memo = 0;
  auto pop = [&]() {
    if (memo == 0) {
      for (ll i = 0; i <= ll(ll(v.size()) - 1); ++i) u.undo();
      reverse((v).begin(), (v).end());
      for (auto& i : v) i.type = 1, u.merge(i.ind);
      memo = ll(v.size());
    }
    while (v.back().type == 0)
      u.undo(), tmp[0].push_back(v.back()), v.pop_back();
    int sz = memo & (-memo);
    for (ll i = 1; i <= ll(sz); ++i)
      u.undo(), tmp[1].push_back(v.back()), v.pop_back();
    for (ll i = 0; i <= ll(1); ++i)
      while (tmp[i].size())
        v.emplace_back(tmp[i].back()), u.merge(tmp[i].back().ind),
            tmp[i].pop_back();
    assert(v.back().type);
    u.undo(), v.pop_back();
    --memo;
  };
  for (ll i = 2; i <= ll(m); ++i) push(i);
  int beg = 1, end = 1;
  while (beg <= m) {
    if (end < beg) pop(), end = beg;
    while (end < m && !u.bp) {
      ++end, pop();
    }
    last[beg] = end + !u.bp;
    push(beg++);
  }
  while (q--) {
    int l, r;
    cin >> l >> r;
    if (last[l] <= r)
      cout << "NO\n";
    else
      cout << "YES\n";
  }
}
