#include<bits/stdc++.h>
using namespace std;
int n,m,k,fa[200005],h[200005],top,ans[100005];
struct Node{
int L,R,x,y;
}e[200005];
struct node{
int x,y,h;
}s[200005];
vector<int> tree[800005];
int find(int x){
if(x==fa[x]) return x;
return fa[x];
}
void gt(int x,int y){
x=find(x),y=find(y);
if(h[x]<h[y]) swap(x,y);
s[++top]={x,y,h[x]==h[y]};
fa[y]=x;
h[x]+=(h[x]==h[y]);
}
void add(int x,int l,int r,int X,int Y,int i){
if(X<=l&&Y>=r){
tree[x].push_back(i);
return;
}
int mid=(l+r)>>1;
if(X<=mid){
add(x<<1,l,mid,X,Y,i);
}
if(Y>mid){
add(x<<1|1,mid+1,r,X,Y,i);
}
}
void egg(int t,int l,int r){
int cnt=0,flag=0;
for(int i=0;i<tree[t].size();i++){
int x=e[tree[t][i]].L,y=e[tree[t][i]].R;
if(find(x)==find(y)){
flag=1;
for(int j=l;j<=r;j++){
ans[j]=1;
}
break;
}
if(find(x)!=find(y+n)){
cnt++;
gt(x,y+n);
}
if(find(y)!=find(x+n)){
cnt++;
gt(y,x+n);
}
}
if(l<r&&flag==0){
int mid=(l+r)>>1;
egg(t<<1,l,mid);
egg(t<<1|1,mid+1,r);
}
while(cnt--){
h[s[top].x]-=s[top].h;
fa[s[top].y]=s[top].y;
top--;
}
}
int main(){
cin>>n>>m>>k;
for(int i=1;i<=m;i++){
int x,y,l,r;
cin>>x>>y>>l>>r;
e[i]={x,y,l+1,r};
if(l+1<=r){
add(1,1,k,l+1,r,i);
}
}
for(int i=1;i<=n+n;i++) fa[i]=i,h[i]=1;
egg(1,1,k);
for(int i=1;i<=k;i++){
cout<<(ans[i]==1?"No\n":"Yes\n");
}
return 0;
}