#include <stdio.h>

using namespace std;

const int N=100002;
const int Q=300;
int P[N],L[N],R[N],V[N];
long long v[Q][N];
long long add[N];
int a[N];
long long s,S[N];
bool calc[N];
long long val;

void adauga (int st, int dr, int L, int R, int V)
{
    long long val;
    if(st>R) return;
    if(dr<L) return;
    if(st<=L && R<=dr)
        val=(long long)(R-L+1);
    if(st<=L && R>dr)
        val=(long long)(dr-L+1);
    if(st>L && R<=dr)
        val=(long long)(R-st+1);
    if(st>L && R>dr)
        val=(long long)(dr-st+1);
    s+=V*val;
}

int main()
{
    FILE *in,*out;
    in=stdin;
    out=stdout;
    int n,m,i,j,k,q,x,y,z,t,st,dr,rad;
    
    fscanf(in,"%d%d",&n,&m);
    for(i=1;i<=m;i++)
    {
        fscanf(in,"%d",&a[i]);
        v[0][i]=v[0][i-1]+a[i];
    }
    rad=1;
    while(rad*rad<=n)
        rad++;
    if(rad>Q)
        rad=Q;
    rad--;
    
    calc[1]=1;
    for(i=2;i<=n;i++)
    {
        fscanf(in,"%d%d%d%d%d%d",&P[i],&x,&y,&V[i],&z,&t);
        L[i]=(x+s)%m + 1;
        R[i]=(y+s)%m + 1;
        st=(z+s)%m + 1;
        dr=(t+s)%m + 1;
        s=0;
        if(j%rad!=1)
        {
            j=i;
            while(!calc[j])
            {
                adauga(st,dr,L[j],R[j],V[j]);
                j=P[j];
            }
            k=(j-1)/rad;
            s+=v[k][dr]-v[k][st-1];
        }
        else
        {
            for(j=1;j<=n;j++)
                add[j]=0;
            j=i;
            while(!calc[j])
            {
                add[L[j]]+=V[j];
                add[R[j]+1]-=V[j];
                j=P[j];
            }
            k=(j-1)/rad;
            q=(i-1)/rad;
            for(j=1;j<=n;j++)
                add[j]+=add[j-1];
            for(j=1;j<=n;j++)
            {
                add[j]+=add[j-1];
                v[q][j]=v[k][j]+add[j];
            }
            s=v[q][dr]-v[q][st-1];
            calc[i]=1;
        }
        S[i]=s;
    }
    for(i=2;i<=n;i++)
        fprintf(out,"%lld\n",S[i]);
    
    return 0;
}
