#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
// by zrt
// problem:
// 无论你在什么时候开始,重要的是开始以后就不要停止。
using namespace std ;
typedef long long LL ;
const double eps(1e-10) ;
const int inf(0x7f3f3f3f) ;
int H[540],X[4000050],P[4000050],flow[4000050],cap[4000050],tot;
int bian[4000050];
int n,m;
int duan[54050],from[450],to[450];
int v[205],a[205],b[205];
int c[550],t;
int tt[450];
int S,T,kase;
struct N{
int l,r;
}xl[550];
inline void add(int x,int y,int z){
P[++tot]=y;X[tot]=H[x];H[x]=tot;flow[tot]=cap[tot]=z;
}
inline bool cmp(N a,N b){
return a.l<b.l;
}
int d[540];
queue<int> q;
bool bfs(){
memset(d,0,sizeof d);
d[S]=1;int k;q.push(S);
while(!q.empty()){
k=q.front();q.pop();
for(int i=H[k];i;i=X[i]){
if(flow[i]>0&&!d[P[i]]){
d[P[i]]=d[k]+1;
q.push(P[i]);
}
}
}
return d[T];
}
int dfs(int x,int a){
if(x==T||a==0) return a;
int tmp,f=a;
for(int i=H[x];i;i=X[i]){
if(flow[i]>0&&d[P[i]]==d[x]+1){
tmp=dfs(P[i],min(flow[i],a));
a-=tmp;
flow[i]-=tmp;
flow[i^1]+=tmp;
if(!a) break;
}
}
if(f==a) d[x]=-1;
return f-a;
}
int Dinic(){
int f(0);
while(bfs()) f+=dfs(S,inf);
return f;
}
int main(){
#ifdef LOCAL
freopen("in.txt","r",stdin) ;
freopen("out.txt","w",stdout) ;
#endif
while(scanf("%d%d",&n,&m)==2){
S=0,T=439;kase++;
int sum(0);
memset(H,0,sizeof H);tot=1;t=0;
for(int i=1;i<=n;i++){
scanf("%d%d%d",&v[i],&a[i],&b[i]);
c[t++]=a[i];c[t++]=b[i];
sum+=v[i];
}
sort(c,c+t);
t=unique(c,c+t)-c;
t--;
for(int i=0;i<t;i++){
from[i]=c[i];to[i]=c[i+1];
duan[c[i]]=i;
}
for(int i=1;i<=n;i++){// duan + 105
add(S,i,v[i]);add(i,S,0);
for(int j=duan[a[i]];;j++){
add(i,j+105,to[j]-from[j]);
bian[tot]=j;
add(j+105,i,0);
if(to[j]==b[i]) break;
}
}
for(int i=0;i<t;i++){
add(i+105,T,m*(to[i]-from[i]));
add(T,i+105,0);
}
if(Dinic()!=sum){
printf("Case %d: No\n",kase);
}else{
printf("Case %d: Yes\n",kase);
memset(tt,0,sizeof tt);
for(int i=1;i<=n;i++){
int sz=0;
for(int j=H[i];j;j=X[j]){
if(cap[j]>0&&cap[j]!=flow[j]){
if(tt[bian[j]]==to[bian[j]]-from[bian[j]]) tt[bian[j]]=0;
if(tt[bian[j]]+cap[j]-flow[j]>to[bian[j]]-from[bian[j]]){
xl[sz].l=tt[bian[j]]+from[bian[j]];
xl[sz].r=to[bian[j]];
sz++;
flow[j]+=to[bian[j]]-from[bian[j]]-tt[bian[j]];
tt[bian[j]]=0;
}
xl[sz].l=tt[bian[j]]+from[bian[j]];
tt[bian[j]]+=cap[j]-flow[j];
xl[sz].r=tt[bian[j]]+from[bian[j]];
sz++;
}
}
sort(xl,xl+sz,cmp);
int num(1);
for(int i=0;i<sz-1;i++){
if(xl[i].r!=xl[i+1].l) num++;
}
printf("%d",num);
int j=0;
while(num--){
printf(" (%d,",xl[j].l);
while(j<sz-1&&xl[j].r==xl[j+1].l) j++;
printf("%d)",xl[j].r);
j++;
}
puts("");
}
}
}
return 0 ;
}