#include <iostream>
typedef long long i64;
struct Node;
const Node *zero[9];
struct Node{
	i64 sum, aadd;
	union{
		const Node *c[4];
		i64 v[2];
	};
	static Node *alloc();
	const Node *add(std::size_t e, i64 a, std::size_t d) const{
		if(e==0) return this;
		Node *res=alloc();
		*res=*this;
		if(e==1<<(2*d+1)){
			res->aadd+=a;
		}else if(d==0){
			res->sum+=a;
			res->v[0]+=a;
		}else{
			d--;
			std::size_t sub=1<<(2*d+1);
			std::size_t full=e/sub, part=e%sub;
			for(std::size_t i=0;i<full;i++){
				res->c[i]=res->c[i]->add(sub, a, d);
			}
			if(part){
				res->c[full]=res->c[full]->add(part, a, d);
			}
			res->sum=0;
			for(std::size_t i=0;i<4;i++){
				res->sum+=res->c[i]->q(sub, d);
			}
		}
		return res;
	}
	i64 q(std::size_t e, std::size_t d) const{
		if(e==0) return 0;
		if(e==1<<(2*d+1)) return sum+(aadd*e);
		if(d==0) return aadd+v[0];
		i64 res=e*aadd;
		d--;
		std::size_t sub=1<<(2*d+1);
		std::size_t full=e/sub, part=e%sub;
		for(std::size_t i=0;i<full;i++){
			res+=c[i]->q(sub, d);
		}
		if(part) res+=c[full]->q(part, d);
		return res;
	}
	void dump(std::size_t d) const{
		if(sum==0 && aadd==0) return;
		std::cout<<"aadd="<<aadd<<" sum="<<sum<<'\n';
		if(d==0){
			std::cout<<v[0]<<' '<<v[1]<<'\n';
		}else{
			std::cout<<"start\n";
			c[0]->dump(d-1);
			c[1]->dump(d-1);
			c[2]->dump(d-1);
			c[3]->dump(d-1);
			std::cout<<"end\n";
		}
		return;
	}
	static Node *read(std::size_t e, std::istream &in, std::size_t d){
		Node *res=alloc();
		if(d==0){
			in>>res->v[0];
			if(e==2) in>>res->v[1];
			res->sum=res->v[0]+res->v[1];
			return res;
		}
		d--;
		std::size_t sub=1<<(2*d+1);
		std::size_t full=e/sub, part=e%sub;
		for(std::size_t i=0;i<full;i++){
			res->c[i]=read(sub, in, d);
		}
		if(part){
			res->c[full]=read(part, in, d);
			full++;
		}
		for(std::size_t i=full;i<4;i++){
			res->c[i]=zero[d];
		}
		for(std::size_t i=0;i<4;i++){
			res->sum+=res->q(sub, d);
		}
		return res;
	}
};
Node stor[18<<17];
std::size_t storN;
Node *Node::alloc(){
	return stor+storN++;
}
const Node *rt[1<<17];
int main(){
	zero[0]=Node::alloc();
	for(std::size_t i=1;i<=8;i++){
		Node *n=Node::alloc();
		n->c[0]=zero[i-1];
		n->c[1]=zero[i-1];
		n->c[2]=zero[i-1];
		n->c[3]=zero[i-1];
		zero[i]=n;
	}
	std::size_t n, m;
	std::cin>>n>>m;
	i64 s=0;
	rt[0]=Node::read(m, std::cin, 8);
	for(std::size_t cur=1;cur<n;cur++){
		std::size_t p, l, r, i, j;
		i64 v;
		std::cin>>p>>l>>r>>v>>i>>j;
		if(p==0){
			rt[cur]=rt[cur-1];
			rt[cur]->dump(8);
			continue;
		}
		p--;
		l=(l+s)%m;
		r=(r+s)%m+1;
		i=(i+s)%m;
		j=(j+s)%m+1;
		rt[cur]=rt[p]->add(r, v, 8)->add(l, -v, 8);
		s=rt[cur]->q(j, 8)-rt[cur]->q(i, 8);
		std::cout<<s<<std::endl;
	}
	return 0;
}
