#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e6+10,mod=1e9+7;
ll n,m,k,x,y,l,r,d[maxn],siz[maxn],top,ans[maxn];
vector<pair<ll,ll> >edge[maxn];
pair<ll,ll> stk[maxn];
void modify(ll p,ll l,ll r,ll ql,ll qr,pair<ll,ll>pa)
{
if(ql<=l&&r<=qr)
{
edge[p].push_back(pa);
return;
}
ll mid=l+r>>1;
if(ql<=mid) modify(p<<1,l,mid,ql,qr,pa);
if(mid<qr) modify(p<<1|1,mid+1,r,ql,qr,pa);
}
ll find(ll x)
{
if(d[x]==x) return x;
return find(d[x]);
}
bool merge(pair<ll,ll>pa)
{
ll x=pa.first,y=pa.second;
x=find(x); y=find(y);
if(x==y) return false;
stk[++top]=pa;
if(siz[x]>siz[y])
{
d[y]=x;
siz[x]+=siz[y];
}
else
{
d[x]=y;
siz[y]+=siz[x];
}
return true;
}
void split()
{
ll x=stk[top].first,y=stk[top].second;
--top;
if(d[x]==y)
{
siz[y]-=siz[x];
d[x]=x;
}
else
{
siz[x]-=siz[y];
d[y]=y;
}
}
void dfs(ll p,ll l,ll r)
{
for(ll i=0;i<edge[p].size();i++)
{
if(!merge(edge[p][i]))
{
while(i--)
{
split();
}
return;
}
}
if(l==r)
{
ans[l]=1;
}
else
{
ll mid=l+r>>1;
dfs(p<<1,l,mid);
dfs(p<<1|1,mid+1,r);
}
for(ll i=0;i<edge[p].size();i++) split();
}
int main()
{
scanf("%lld%lld%lld",&n,&m,&k);
for(ll i=1;i<=n*2;i++) d[i]=i,siz[i]=1;
for(ll i=1;i<=m;i++)
{
ll x,y,l,r;
scanf("%lld%lld%lld%lld",&x,&y,&l,&r);
++l;
if(l>r) continue;
modify(1,1,k,l,r,make_pair(x,y+n));
modify(1,1,k,l,r,make_pair(x+n,y));
}
dfs(1,1,k);
for(ll i=1;i<=k;i++)
if(ans[i]) printf("Yes\n");
else printf("No\n");
return 0;
}