#include <bits/stdc++.h>
using namespace std;
long long read() {
  long long f = 1, x = 0;
  char s = getchar();
  while (s < '0' || s > '9') {
    if (s == '-') f = -f;
    s = getchar();
  }
  while (s >= '0' && s <= '9') {
    x = x * 10 + (s - '0');
    s = getchar();
  }
  return f * x;
}
int n, m, i, j, s, o, k;
int U[200005], V[200005];
vector<int> g[200005];
int fa[200005], ds[200005], siz[200005];
int findd(int x) {
  if (x == fa[x]) return 0;
  return findd(fa[x]) ^ ds[x];
}
int findf(int x) { return x == fa[x] ? x : findf(fa[x]); }
vector<int> st;
bool unionSet(int a, int b) {
  int u = findf(a), v = findf(b);
  if (siz[u] > siz[v]) swap(u, v), swap(a, b);
  int d1 = findd(a), d2 = findd(b);
  if (u == v) {
    return d1 ^ d2;
  }
  if (d1 == d2)
    ds[u] = 1;
  else
    ds[u] = 0;
  siz[v] += siz[u];
  fa[u] = v;
  st.push_back(u);
  return 1;
}
void POP() {
  int u = st.back();
  st.pop_back();
  int v = fa[u];
  ds[u] = 0;
  siz[v] -= siz[u];
  fa[u] = u;
  return;
}
int maxl[200005];
int li[200005], ri[200005];
void solve(int l, int r, int l2, int r2) {
  if (l > r || l2 > r2) return;
  if (l2 == r2) {
    for (int i = l; i <= r; i++) maxl[i] = l2;
    return;
  }
  int mid = (l + r) >> 1, le = (int)st.size(), rr = max(l2, mid - 1);
  int flag = 0;
  for (int i = l; i <= mid; i++)
    if (i) flag |= 1 ^ unionSet(U[i], V[i]);
  int le2 = (int)st.size();
  if (flag) rr = r2;
  for (int i = min(r2, m); i > mid && i >= l2 && i > rr; i--) {
    flag |= 1 ^ unionSet(U[i], V[i]);
    if (flag) {
      rr = i;
      break;
    }
  }
  maxl[mid] = rr;
  while ((int)st.size() > le2) POP();
  solve(mid + 1, r, rr, r2);
  while ((int)st.size() > le) POP();
  for (int i = min(r2, m); i >= rr; i--) unionSet(U[i], V[i]);
  solve(l, mid - 1, l2, rr);
  while ((int)st.size() > le) POP();
  return;
}
int main() {
  n = read();
  m = read();
  int Q = read();
  for (int i = 1; i <= m; i++) {
    s = read();
    o = read();
    g[s].push_back(o);
    g[o].push_back(s);
    U[i] = s;
    V[i] = o;
  }
  int rr = 0;
  for (int i = 1; i <= Q; i++)
    li[i] = read(), ri[i] = read(), rr = max(li[i], rr);
  for (int i = 1; i <= n; i++) fa[i] = i, ds[i] = 0, siz[i] = 1;
  solve(0, m, 0, m + 1);
  for (int i = 1; i <= Q; i++) {
    s = li[i];
    o = ri[i];
    if (maxl[s - 1] > o)
      printf("YES\n");
    else
      printf("NO\n");
  }
  return 0;
}
