#include <stdio.h>
#define m 1000000007u
typedef long long unsigned llu;
typedef unsigned u;
u M[16][64][16][16];
u X[16],Y[16],*A,*B,*C;
int main()
{
u q,n,e,i,j,k;
for(n=-1;++n<16;)
{
for(i=-1;++i<=n;)
for(j=-1;++j<=n;)
M[n][0][i][j]=(i<j?j-i:i-j)<2;
for(e=0;++e<64;)
{
for(i=-1;++i<=n;)
for(j=-1;++j<=n;)
for(k=-1;++k<=n;)
M[n][e][i][j]=
(
M[n][e][i][j]+
M[n][e-1][i][k]*
(llu)M[n][e-1][k][j]
)%m;
}
}
llu x,y,z;*(A=X)=1;B=Y;
for(scanf(“%u%I64u”,&q,&z);q–;)
{
scanf(“%I64u%I64u%u”,&x,&y,&n);
if(y>z)y=z;
for(x=y-x,e=0;x;x>>=1,++e)if(x&1)
{
for(i=-1;++i<=n;)
for(B[i]=0,j=-1;++j<=n;)
B[i]=(B[i]+M[n][e][i][j]*(llu)A[j])%m;
C=A;A=B;B=C;
}
for(i=n;++i<16;)A[i]=0;
}
printf(“%u\n”,*A);
return 0;
}