#include <stdio.h>
#include <vector>
using namespace std;
#define MAXN 100000

int M,N,mrav[MAXN];
vector <int> mrav2[MAXN];

struct cities
{
    int P, X, Y, V, Z, T, S, R, L, i, j, PS;
}city[MAXN];

void inAll()
{
    scanf("%d %d",&N,&M);
    for (int i = 0; i < M; i++)
        scanf("%d",&mrav[i]);
    for (int i = 0; i < N-1; i++)
        scanf("%d %d %d %d %d %d",&city[i].P,&city[i].X,&city[i].Y,&city[i].V,&city[i].Z,&city[i].T);
}

void getAnswer()
{
    city[0].PS = 0;
    for (int i = 0; i < N-1; i++)
    {
        if (city[i].P-1!=0) city[i].PS = city[city[i].P-2].S;
        else city[i].PS = 0;
        //printf("%d*\n",city[i].PS);
        city[i].L = (city[i].X + city[i].PS) % M + 1; 
        city[i].R = (city[i].Y + city[i].PS) % M + 1;
        city[i].i = (city[i].Z + city[i].PS) % M + 1; 
        city[i].j = (city[i].T + city[i].PS) % M + 1;
        if (city[i].PS==0) 
        for (int j = 0; j <= M; j++)
            mrav2[i].push_back(mrav[j]);
        else
        for (int j = 0; j <= M; j++)
            mrav2[i].push_back(mrav2[city[i].P-2][j]);
        for (int j = city[i].L-1; j <= city[i].R-1; j++)
            mrav2[i][j]+=city[i].V;  
        city[i].S = 0;
        for (int j = city[i].i-1; j <= city[i].j-1; j++)
            city[i].S+=mrav2[i][j]; 
        
        printf("%d\n",city[i].S);  
        
    }
}

int main()
{
    inAll();
    getAnswer();
    return 0;
}