#include<cstdio>
struct nod
{
    int st,dr,sup,sum;
}ai[300000];
void init(int po,int st,int dr)
{
    if(st>dr)
        return ;
    int mi;
    mi=(st+dr)/2;
    ai[po].st=st;
    ai[po].dr=dr;
    if(st!=dr)
    {
    init(2*po,st,mi);
    init(2*po+1,mi+1,dr);
    }
}
void up(int nod,int st,int dr,int val)
{
    if(st>dr)
        return ;
    if(st==ai[nod].st && dr==ai[nod].dr)
    {
        ai[nod].sup=ai[nod].sup+val;
        return ;
    }
    int mi;
    ai[nod].sum+=val;
    mi=(ai[nod].st+ai[nod].dr)/2;
    if(ai[nod].st!=ai[nod].dr)
    {
    if(dr<mi)
        up(nod*2,st,dr,val);
    else
    if(st>mi)
        up(nod*2+1,st,dr,val);
    else
    {
         up(nod*2,st,mi,val);
         up(nod*2+1,mi+1,dr,val);
    }
    }
}
int query(int nod,int st,int dr)
{
    if(st>dr)
        return 0;
    int su=0,mi;
    mi=(ai[nod].st+ai[nod].dr)/2;
    su=su+ai[nod].sup;
    if(st==ai[nod].st && dr==ai[nod].dr)
    {
     su=su+ai[nod].sum;
        return su;
    }
    else
    {
         if(dr<mi)
        return query(nod*2,st,dr);
    else
    if(st>mi)
        return query(nod*2+1,st,dr);
    else
    {
        return  query(nod*2,st,mi)+query(nod*2+1,mi+1,dr);
    }
    }
}
int main()
{
  //  freopen("x.in","r",stdin);
    int n,m,i,a,p,x,y,v,z,t,r,l,j,s=0,q;
    scanf("%d%d",&n,&m);
    init(1,1,m);
    for(i=1;i<=m;i++)
    {
        scanf("%d",&a);
        up(1,i,i,a);
    }
    for(q=1;q<n;q++)
    {
        scanf("%d%d%d%d%d%d",&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;
        up(1,l,r,v);
        s=query(1,i,j);
        printf("%d\n",s);
    }
    return 0;
}
