#include<iostream>
using namespace std;
int a[100005];
struct dy
{
    int it;
    int la;
    dy *l;
    dy *r;
    dy *u;
}*root[100005];
int ul,ur,u,i,j,fa;
dy *ll,*rr;
void build(dy *x,int l,int r)
{
    if(l==r)
    {
        (*x).it=a[l];
        return;
    }
    (*x).l=new dy;
    (*x).r=new dy;
    build((*x).l,l,(l+r)/2);
    build((*x).r,(l+r)/2+1,r);
    (*x).it=(*(*x).l).it+(*(*x).r).it;
}
void upbuild(dy *o,dy *n,int l,int r,int lazy)
{
    (*n).u=o;
    if(ul<=l && r<=ur)
    {
        (*n).it=(*o).it+(u+lazy)*(r-l+1);
        (*n).la=lazy+u;
        return;
    }
    if((l+r)/2<ul)(*n).l=(*o).l;
    if((l+r)/2+1>ur)(*n).r=(*o).r;
    if(ul<=(l+r)/2)
    {
        (*n).l=new dy;
        if((*o).l==NULL)upbuild((*o).u,n,l,r,lazy+(*o).la);
        else upbuild((*o).l,(*n).l,l,(l+r)/2,lazy);
    }
    if((l+r)/2+1<=ur)
    {
        (*n).r=new dy;
        if((*o).r==NULL)upbuild((*o).u,n,l,r,lazy+(*o).la);
        upbuild((*o).r,(*n).r,(l+r)/2+1,r,lazy);
    }
    (*n).it=(*(*n).l).it+(*(*n).r).it;
}
int find(dy *x,int l,int r,int lazy)
{
    int s=0;
    if(i<=l && r<=j)return (*x).it+(r-l+1)*lazy;
    if(i<=(l+r)/2)
    {
        if((*x).l==NULL)s+=find((*x).u,l,r,lazy+(*x).la);
        else s+=find((*x).l,l,(l+r)/2,lazy);
    }
    if((l+r)/2+1<=j)
    {
        if((*x).r==NULL)s+=find((*x).u,l,r,lazy+(*x).la);
        else s+=find((*x).r,(l+r)/2+1,r,lazy);
    }
    return s;
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n,m,k,s=0,t;
    cin>>n>>m;
    for(i=1;i<=m;i++)
        cin>>a[i];
    root[0]=new dy;
    build(root[0],1,m);
    for(k=1;k<n;k++)
    {
        cin>>t>>ul>>ur>>u>>i>>j;
        ul=(ul+s)%m+1;
        ur=(ur+s)%m+1;
        i=(i+s)%m+1;
        j=(j+s)%m+1;
        root[k]=new dy;
        upbuild(root[t-1],root[k],1,m,0);
        fa=1;
        s=find(root[k],1,m,0);
        cout<<s<<endl;
    }
}
