#include<bits/stdc++.h>
using namespace std;
int fa[1005050],h[1005050];
vector<pair<int,int> >vec[1005050<<2];
int n,m,k,ans[1005050],top=0;
#define pb(x,y) push_back(make_pair(x,y))
struct poi{
int u,v,delta;
}st[3005050];
int getf(int x){
if(x==fa[x])return x;
return getf(fa[x]);
}
void merge(int u,int v){
int f1=getf(u),f2=getf(v);
if(f1==f2)return;
if(h[f1]<h[f2])swap(f1,f2);
st[++top]=(poi){f1,f2,(h[f2]==h[f1])};
fa[f2]=f1;
h[f1]+=(h[f2]==h[f1]);
}
void add(int p,int s,int t,int x,int y,int l,int r){
if(l<=s&&t<=r){
vec[p].pb(x,y);
return;
}
int mid=(s+t)/2;
if(l<=mid)add(p<<1,s,mid,x,y,l,r);
if(r>mid)add(p<<1|1,mid+1,t,x,y,l,r);
}
void solve(int p,int s,int t){
int fl=1;
for(pair<int,int> d:vec[p]){
int x=d.first,y=d.second;
int f1=getf(x),f2=getf(y);
if(f1^f2){
merge(x+n,y);merge(y+n,x);
}
else{
fl=0;
}
}
if(fl==0){
for(int i=s;i<=t;i++)puts("No");
return;
}
if(s==t){
puts("Yes");return;
}
int mid=(s+t)/2;int lsttop=top;
solve(p<<1,s,mid);solve(p<<1|1,mid+1,t);
while(top>lsttop){
poi tmp=st[top];
fa[tmp.v]=tmp.v;
h[tmp.u]-=tmp.delta;
top--;
}
}
int main(){
cin>>n>>m>>k;
for(int i=1;i<=2*n;i++)fa[i]=i,h[i]=1;
for(int i=1;i<=m;i++){
int x,y,l,r;
cin>>x>>y>>l>>r;
if(l==r)continue;
add(1,1,k,x,y,l+1,r);
}
solve(1,1,k);
}