#include <cstdio>

using namespace std;

#define NMAX 400007
#define KMAX 1007
#define LL long long

LL w[NMAX],e[NMAX],sum[NMAX];
LL A[KMAX][KMAX];
LL M,N,L,R,i,j,X,Y,Z,T,V,P,S,suma,precalcul,current;

void Update_sum(LL node,LL value)
{
	if (node==0) return ;
	
	sum[node]+=value;
	Update_sum(node/2,value);
}

void Update(LL node,LL left,LL right,LL query_left,LL query_right,LL value)
{
	if (query_right<left || right<query_left) return ;
	
	if (query_left<=left && right<=query_right)
	{
		w[node]+=value;
		Update_sum(node/2,value*(right-left+1));
		return ;
	}
	
	LL mid=(left+right)>>1;
	Update(2*node,left,mid,query_left,query_right,value);
	Update(2*node+1,mid+1,right,query_left,query_right,value);
}

LL get_value(LL node)
{
	if (node==0) return 0;
	
	return get_value(node/2)+w[node];
}

LL Query(LL node,LL left,LL right,LL query_left,LL query_right)
{
	if (query_right<left || right<query_left) return 0;
	
	if (query_left<=left && right<=query_right)
	return get_value(node)*(right-left+1);
	
	LL mid=(left+right)>>1;
	return Query(2*node,left,mid,query_left,query_right) + Query(2*node+1,mid+1,right,query_left,query_right);
}

LL Query_sum(LL node,LL left,LL right,LL query_left,LL query_right)
{
	if (query_right<left || right<query_left) return 0;
	
	if (query_left<=left && right<=query_right)
	return sum[node];
	
	LL mid=(left+right)>>1;
	return Query_sum(2*node,left,mid,query_left,query_right) + Query_sum(2*node+1,mid+1,right,query_left,query_right);
}

void brute()
{
	for (i=1;i<=M;++i) A[1][i]=e[i];
	current=1;
	
	for (--N;N;--N)
	{
		scanf("%lld%lld%lld%lld%lld%lld",&P,&X,&Y,&V,&Z,&T);
	
		L=((X+S)%M)+1;
		R=((Y+S)%M)+1;
		i=((Z+S)%M)+1;
		j=((T+S)%M)+1;
		
		++current;
		S=0;
		
		for (int k=1;k<=M;++k)
		{
			A[current][k]=A[P][k]+((L<=k && k<=R) ? V : 0);
			if (i<=k && k<=j) S+=A[current][k]; 
		}
		
		printf("%lld\n",S);
	}
}

int main()
{
//freopen("ants.in","r",stdin);
//freopen("ants.out","w",stdout);

for (i=1,scanf("%lld%lld",&N,&M);i<=M;++i)
scanf("%lld",&e[i]);


if (N<=1000 && M<=1000)
{
	brute();
	return 0;
}

for (i=1;i<=M;++i) e[i]+=e[i-1];

for (--N;N;--N)
{
	scanf("%lld%lld%lld%lld%lld%lld",&P,&X,&Y,&V,&Z,&T);
	
	L=((X+S)%M)+1;
	R=((Y+S)%M)+1;
	i=((Z+S)%M)+1;
	j=((T+S)%M)+1;
	
	Update(1,1,M,L,R,V);
	
	suma=Query_sum(1,1,M,i,j);
	precalcul=Query(1,1,M,i,j);
	
	S=precalcul+suma+e[j]-e[i-1];
	
	printf("%lld\n",S);
}

return 0;
}
