#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+50;//注意修改大小
long long read(){long long x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;}
ll qpow(ll x,ll q,ll Mod){ll ans=1;while(q){if(q&1)ans=ans*x%Mod;q>>=1;x=(x*x)%Mod;}return ans%Mod;}
int n,m,k[maxn],op[maxn][2];
struct Node{
   int l,r; 
}rg[maxn][2],temp[2];
int main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>k[i];
        cin>>rg[i][0].l>>rg[i][0].r>>rg[i][1].l>>rg[i][1].r;
    }
    rg[n+1][0].l=0;rg[n+1][0].r=m;
    rg[n+1][1].l=0;rg[n+1][1].r=m;
    for(int i=n;i>=1;i--){
        temp[0]=rg[i][0];temp[1]=rg[i][1];
        for(int j=0;j<=1;j++){
            if(k[i]>=temp[j^1].l&&k[i]<=temp[j^1].r){
                if(k[i]>=rg[i+1][j^1].l&&k[i]<=rg[i+1][j^1].r){
                    op[i][j^1]=j;
                }
                else{
                    rg[i][j].l = max(rg[i][j].l, rg[i + 1][j].l);
                    rg[i][j].r = min(rg[i][j].r, rg[i + 1][j].r);
                    op[i][j^1]=j^1;
                }
            }
            else{
                rg[i][j].l=m;rg[i][j].r=0;
            }
        }
    }
    if(!(rg[1][0].l<=0&&0<=rg[1][0].r)&&!(rg[1][1].l<=0&&0<=rg[1][1].r)){
        cout<<"No"<<endl;
    }
    else{
        cout<<"Yes"<<endl;
        int t=(rg[1][0].l<=0&&0<=rg[1][0].r);
        for(int i=1;i<=n;i++){
            cout<<t<<' ';
            t=op[i][t];
        }
        cout<<endl;
    }
    return 0;
}