#include <stdio.h>

using namespace std;

const int N=100002;
int P[N],L[N],R[N],V[N];
long long a[N];
long long s,S[N];

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,x,y,z,t,st,dr,r;
    
    fscanf(in,"%d%d",&n,&m);
    for(i=1;i<=m;i++)
    {
        fscanf(in,"%lld",&a[i]);
        a[i]+=a[i-1];
    }
    
    for(i=2;i<=n;i++)
    {
        fscanf(in,"%d%d%d%d%d%d",&P[i],&x,&y,&V[i],&z,&t);
        r=s%m;
        L[i]=x+r;
        if(L[i]>m)
            L[i]-=m;
        L[i]++;
        R[i]=y+r;
        if(R[i]>m)
            R[i]-=m;
        R[i]++;
        st=z+r;
        if(st>m)
            st-=m;
        st++;
        dr=t+r;
        if(dr>m)
            dr-=m;
        dr++;
        s=0;
        j=i;
        while(j>1)
        {
            adauga(st,dr,L[j],R[j],V[j]);
            j=P[j];
        }
        s+=a[dr]-a[st-1];
        S[i]=s;
    }
    for(i=2;i<=n;i++)
        fprintf(out,"%lld\n",S[i]);
    
    return 0;
}
