#include <iostream>
#include <cstdio>
using namespace std;
const int N = 1e5 + 10;
int n, m;
int k[N];
struct s
{
	int l, r;
}rg[N][2];
int to[N][2];
int main()
{
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; ++ i)
	{
		scanf("%d%d%d%d%d", &k[i], &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; -- i)
	{
		s now[2];
		now[0] = rg[i][0];
		now[1] = rg[i][1];
		if(now[0].l <= k[i] && k[i] <= now[0].r)
		{
			if(rg[i + 1][0].l <= k[i] && k[i] <= rg[i + 1][0].r)
			{
				to[i][0] = 1;
			}
			else
			{
				rg[i][1].l = max(rg[i + 1][1].l, rg[i][1].l);
				rg[i][1].r = min(rg[i + 1][1].r, rg[i][1].r);
				to[i][0] = 0;
			}
		}
		else
		rg[i][1].l = m, rg[i][1].r = 0;
		
		if(now[1].l <= k[i] && k[i] <= now[1].r)
		{
			if(rg[i + 1][1].l <= k[i] && k[i] <= rg[i + 1][1].r)
			{
				to[i][1] = 0;
			}
			else
			{
				rg[i][0].l = max(rg[i + 1][0].l, rg[i][0].l);
				rg[i][0].r = min(rg[i + 1][0].r, rg[i][0].r);
				to[i][1] = 1;
			}
		}
		else
		rg[i][0].l = m, rg[i][0].r = 0;
	}
	if((rg[1][0].l <= 0 && 0 <= rg[1][0].r) || (rg[1][1].l <= 0 && 0 <= rg[1][1].r))
	{
		printf("YES\n");
		int now = (rg[1][0].l <= 0 && 0 <= rg[1][0].r);
		for (int i = 1; i <= n; ++ i)
		{
			printf("%d ", now);
			now = to[i][now];
		}
	}
	else
	printf("NO\n");
}