#include <bits/stdc++.h>
using namespace std;
const int N = 6 * 1e5 + 100;
int n, m, q, u[N], v[N], id[N], pos[N], vi[N], sz[N];
int son[N][2], fa[N], tag[N], MIN[N], val[N], wh[N];
inline int sf(int x) { return son[fa[x]][1] == x; }
inline bool nroot(int x) { return son[fa[x]][0] == x || son[fa[x]][1] == x; }
inline void connect(int x, int y, int dir) {
  son[y][dir] = x;
  fa[x] = y;
}
inline void rev(int x) {
  swap(son[x][0], son[x][1]);
  tag[x] ^= 1;
}
inline void pushup(int x) {
  sz[x] = sz[son[x][0]] + sz[son[x][1]] + 1;
  MIN[x] = 0x3f3f3f3f;
  if (son[x][0] && MIN[son[x][0]] < MIN[x])
    MIN[x] = MIN[son[x][0]], wh[x] = wh[son[x][0]];
  if (son[x][1] && MIN[son[x][1]] < MIN[x])
    MIN[x] = MIN[son[x][1]], wh[x] = wh[son[x][1]];
  if (val[x] < MIN[x]) MIN[x] = val[x], wh[x] = x;
}
inline void pushdown(int x) {
  if (tag[x]) {
    if (son[x][0]) rev(son[x][0]);
    if (son[x][1]) rev(son[x][1]);
    tag[x] = 0;
  }
}
inline void pushall(int x) {
  if (nroot(x)) pushall(fa[x]);
  pushdown(x);
}
inline void rotate(int x) {
  int f, gf, xd, fd, s;
  f = fa[x];
  gf = fa[f];
  xd = sf(x);
  fd = sf(f);
  s = son[x][xd ^ 1];
  if (nroot(f)) connect(x, gf, fd);
  connect(f, x, xd ^ 1);
  if (s) connect(s, f, xd);
  fa[x] = gf;
  son[f][xd] = s;
  pushup(f);
  pushup(x);
}
inline void splay(int x) {
  pushall(x);
  while (nroot(x)) {
    if (!nroot(fa[x]))
      rotate(x);
    else if (sf(fa[x]) == sf(x))
      rotate(fa[x]), rotate(x);
    else
      rotate(x), rotate(x);
  }
}
inline void access(int x) {
  for (int y = 0; x; y = x, x = fa[x]) {
    splay(x);
    son[x][1] = y;
    pushup(x);
  }
}
inline void makeroot(int x) {
  access(x);
  splay(x);
  rev(x);
}
inline int findroot(int x) {
  access(x);
  splay(x);
  while (son[x][0]) pushdown(x), x = son[x][0];
  splay(x);
  return x;
}
inline void split(int x, int y) {
  makeroot(x);
  access(y);
  splay(y);
}
inline bool link(int x, int y) {
  makeroot(x);
  if (findroot(y) != x) {
    fa[x] = y;
    return 1;
  }
  return 0;
}
inline void cut(int x, int y) {
  split(x, y);
  if (son[y][0] == x && son[y][1] == 0 && findroot(y) == x) {
    son[x][1] = fa[y] = 0;
    pushup(x);
  }
}
inline bool check(int x, int y) {
  makeroot(x);
  return findroot(y) == x;
}
inline bool add(int i) {
  if (!check(u[i], v[i])) {
    vi[i] = 1;
    link(u[i], id[i]);
    link(id[i], v[i]);
    return 1;
  }
  if (sz[u[i]] % 4 == 1) return 0;
  int j = wh[u[i]] - n;
  vi[j] = 0;
  vi[i] = 1;
  cut(u[j], id[j]);
  cut(id[j], v[j]);
  link(u[i], id[i]);
  link(id[i], v[i]);
  return 1;
}
signed main() {
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 1; i <= m; i++) scanf("%d%d", &u[i], &v[i]), id[i] = i + n;
  for (int i = 1; i <= m; i++)
    u[i + m] = u[i], v[i + m] = v[i], id[i + m] = id[i] + m;
  for (int i = n + 1; i <= n + 2 * m; i++) val[i] = i - n, sz[i] = 1;
  for (int i = 1; i <= n; i++) sz[i] = 1, val[i] = 0x3f3f3f3f;
  for (int i = 1, j = 1; i <= m + 1; i++) {
    while (j < i + m && add(j)) j++;
    pos[i] = j - 1;
    if (vi[i]) {
      vi[i] = 0;
      cut(u[i], id[i]);
      cut(id[i], v[i]);
    }
  }
  while (q--) {
    int l, r;
    scanf("%d%d", &l, &r);
    if (pos[r + 1] >= l + m - 1)
      printf("NO\n");
    else
      printf("YES\n");
  }
}
