#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9 + 7;
const long long INF = 1e18 + 7;
int pa[200010], pr[200010], sz[200010];
inline pair<int, int> par(int x) {
  int y = 0;
  while (pa[x] != 0) y ^= pr[x], x = pa[x];
  return pair<int, int>(x, y);
}
vector<pair<int, pair<int*, int> > > rbv;
inline void rb(int p) {
  while (!rbv.empty() && rbv.back().first == p)
    *rbv.back().second.first = rbv.back().second.second, rbv.pop_back();
  return;
}
inline void uni(int x, int y, int p) {
  int odd = par(x).second ^ par(y).second;
  x = par(x).first;
  y = par(y).first;
  if (x == y) return;
  if (sz[x] > sz[y]) swap(x, y);
  rbv.emplace_back(p, pair<int*, int>(sz + y, sz[y]));
  sz[y] += sz[x];
  rbv.emplace_back(p, pair<int*, int>(pa + x, 0));
  pa[x] = y;
  pr[x] = odd ^ 1;
  return;
}
int ans[200010];
vector<pair<int, int> > edge;
void dnc(int n, int s, int e, int mx) {
  if (s > e) return;
  int m = s + (e - s) / 2;
  if (mx == inf) {
    ans[m] = inf;
    dnc(n + 1, s, m - 1, mx);
    dnc(n + 1, m + 1, e, mx);
    return;
  }
  ans[m] = m;
  for (int i = s; i < m; i++) {
    if (par(edge[i].first) == par(edge[i].second)) ans[m] = inf;
    uni(edge[i].first, edge[i].second, n);
  }
  if (ans[m] == m) {
    for (int i = mx - 1; i >= m; i--) {
      if (par(edge[i].first) == par(edge[i].second)) {
        ans[m] = i + 1;
        break;
      }
      uni(edge[i].first, edge[i].second, n + 1);
    }
  }
  rb(n + 1);
  if (m < (int)edge.size()) {
    if (par(edge[m].first) == par(edge[m].second))
      dnc(n + 1, m + 1, e, inf);
    else
      uni(edge[m].first, edge[m].second, n),
          dnc(n + 1, m + 1, e, ans[m] == inf ? inf : mx);
  }
  rb(n);
  for (int i = mx - 1; i >= ans[m]; i--) uni(edge[i].first, edge[i].second, n);
  dnc(n + 1, s, m - 1, ans[m] == inf ? mx : ans[m]);
  rb(n);
  return;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  int n, m, q;
  cin >> n >> m >> q;
  for (int i = 0; i++ < n;) sz[i] = 1;
  edge.resize(m);
  for (pair<int, int>& t : edge) cin >> t.first >> t.second;
  vector<pair<int, int> > qv(q);
  vector<int> cv;
  for (pair<int, int>& t : qv) cin >> t.first >> t.second, t.first--;
  dnc(1, 0, m, m);
  for (pair<int, int>& t : qv)
    cout << (t.second < ans[t.first] ? "YES\n" : "NO\n");
  cout.flush();
  return 0;
}
