#include"bits/stdc++.h"
using namespace std;
const int nMax = 2e5 + 7;
long long cnt = 0;
bool ans[nMax];
long long smL[nMax];
long long rnk[nMax];
long long eq[nMax];
long long par[nMax];
stack <pair <long long , long long > > st;
long long int sH = 50;
bool comp(array<long long ,3> x,array<long long,3> y)
{
if(x[0]/sH == y[0]/sH)
return x[1] > y[1];
return y[0]/sH > x[0]/sH;
}
pair <long long , long long> findPar(long long a, long long tmp){
if(par[a] == a){
tmp = (tmp ^ eq[a]);
return make_pair(a , tmp);
}
return findPar(par[a] , tmp ^ eq[a]);
}
bool uni(long long a , long long b){
pair <long long , long long> fr = findPar(a , 0);
pair <long long , long long> sec = findPar(b , 0);
//cout << a << " " << b << " "<< fr.first << " " << sec.first << "\n";
if(fr.first == sec.first){
if(fr.second == sec.second){
st.push(make_pair(-1 , cnt));
cnt++;
return false;
}
return true;
}
a = fr.first;
b = sec.first;
if(rnk[a] > rnk[b]){
swap(a , b);
}
st.push(make_pair(a , -1));
rnk[b] += rnk[a];
eq[a] = 0;
if(fr.second == sec.second){
eq[a] = 1;
}
par[a] = b;
return true;
}
void rollback(int sz){
while(st.size() > sz){
long long piv = st.top().first;
if(piv == -1){
cnt = st.top().second;
st.pop();
continue;
}
eq[piv] = 0;
rnk[par[piv]] -= rnk[piv];
par[piv] = piv;
st.pop();
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
long long n , m , q , l , r;
vector <array <long long , 2> > edges;
array <long long , 2> tmp;
cin >> n >> m >> q;
sH = sqrt(q)
for(long long i = 1; n >= i; i++){
rnk[i] = 1;
par[i] = i;
}
tmp[0] = 0;
tmp[1] = 0;
edges.push_back(tmp);
for(long long i = 0; m > i; i++){
cin >> l >> r;
tmp[0] = l;
tmp[1] = r;
edges.push_back(tmp);
}
vector <array <long long , 3> > queries;
array <long long , 3> tm;
for(long long i = 0; q > i; i++){
cin >> l >> r;
tm[0] = l;
tm[1] = r;
tm[2] = i;
if(smL[l / sH] == 0){
smL[l / sH] = 1e9;
}
smL[l / sH] = min(smL[l / sH] , l);
queries.push_back(tm);
}
sort(queries.begin(), queries.end() , comp);
l = 1;
r = m;
long long po = 0;
bool isBi = true;
for(long long i = 0; q > i; i++){
if(i == 0 || (queries[i - 1][0] / sH) != (queries[i][0] / sH)){
rollback(po);
r = m;
while(l < smL[queries[i][0] / sH]){
isBi = (isBi & uni(edges[l][0] , edges[l][1]));
l++;
}
po = st.size();
}
while(r > 1 && r > queries[i][1]){
isBi = (isBi & uni(edges[r][0] , edges[r][1]));
r--;
}
long long tmr = st.size();
l = smL[queries[i][0] / sH];
while(m > l && l < queries[i][0]){
isBi = (isBi & uni(edges[l][0] , edges[l][1]));
l++;
}
if(cnt == 0){
isBi = true;
}
ans[queries[i][2]] = !(isBi);
rollback(tmr);
l = smL[queries[i][0] / sH];
}
for(long long i = 0; q > i; i++){
if(ans[i]){
cout << "YES\n";
}
else{
cout << "NO\n";
}
}
}