#include<bits/stdc++.h>
int n,m,k,fa[1200010],Maxdep[1200010];
struct edge{int u,v;}e[1200010];
struct node{
int lef,rig;
vector<int>q;
}tr[1200010];
inline void build(int id,int lef,int rig){
tr[id].lef=lef;tr[id].rig=rig;
if(lef==rig)return ;
build(id<<1,lef,lef+rig>>1);
build(id<<1|1,(lef+rig>>1)+1,rig);
}
inline void modify(int id,int lef,int rig,int ID){
if(tr[id].lef>rig||tr[id].rig<lef)return;
if(tr[id].lef>=lef&&tr[id].rig<=rig)
return void(tr[id].q.emplace_back(ID));
modify(id<<1,lef,rig,ID);
modify(id<<1|1,lef,rig,ID);
}
inline int find(int x){
while(fa[x]!=x)x=fa[x];
return x;
}
struct TMP{
int u,v,flag;
}tmp[1200010];
int tot=0;
inline void add(int u,int v){
if(Maxdep[v]>Maxdep[v])swap(u,v);
tmp[++tot]={u,v,Maxdep[u]==Maxdep[v]};
fa[u]=v;if(Maxdep[u]==Maxdep[v])Maxdep[v]++;
}
inline void solve(int id,int lef,int rig,int flag=1){
int tmptot=tot;
for(int i : tr[id].q){
int u=find(e[i].u),v=find(e[i].v);
if(u==v){
for(int j=lef;j<=rig;j++)
cout<<"No\n";
flag=0;break;
}
add(u,find(e[i].v+n));
add(v,find(e[i].u+n));
}
if(flag){
if(lef==rig)cout<<"Yes\n";
else solve(id<<1,lef,lef+rig>>1),
solve(id<<1|1,(lef+rig>>1)+1,rig);
}
while(tot>tmptot){
int u=tmp[tot].u,v=tmp[tot].v,flag=tmp[tot].flag;
Maxdep[v]-=flag;fa[u]=u;tot--;
}
}
int main(){
cin>>n>>m>>k;build(1,1,n);
for(int i=1,lef,rig;i<=m;i++){
cin>>e[i].u>>e[i].v;
cin>>lef>>rig;lef++;
modify(1,lef,rig,i);
}
for(int i=1;i<=(n<<1);i++)
fa[i]=i,Maxdep[i]=1;
solve(1,1,k);
}