#include<cstdio>
using namespace std;

int a[400009], N, M;
unsigned long long ANS, arb[400009], sum[400009], s[400009];

void lazy (int nod, int st, int dr, int mij)
{
    if (arb[nod])
    {
        arb[nod<<1] += arb[nod];
        sum[nod<<1] += 1LL * arb[nod] * (mij - st + 1);
        arb[(nod<<1) + 1] += arb[nod];
        sum[(nod<<1) + 1] += 1LL * arb[nod] * (dr - mij);
        arb[nod] = 0;
    }
}

void U (int nod, int st, int dr, int x, int y, int V)
{
    if (x<=st && dr <= y)
    {
        arb[nod] += V;
        sum[nod] += 1LL * V * (dr - st + 1);
        return ;
    }
    int mij = (st + dr) >> 1;
    lazy (nod, st, dr, mij);
    if (x <= mij) U (nod<<1, st, mij, x, y, V);
    if (y > mij) U ((nod<<1)+1, mij+1, dr, x, y, V);
    sum[nod] = sum[nod<<1] + sum[(nod<<1)+1];
}

void Q (int nod, int st, int dr, int x, int y)
{
    if (x <= st && dr <= y)
    {
        ANS += sum[nod];
        return ;
    }
    int mij = (st + dr) >> 1;
    lazy (nod, st, dr, mij);
    if (x <= mij) Q (nod<<1, st, mij, x, y);
    if (y > mij) Q ((nod<<1)+1, mij+1, dr, x, y);
    sum[nod] = sum[nod<<1] + sum[(nod<<1)+1];
}

int main()
{
//freopen ("input", "r", stdin);
//freopen ("output", "w", stdout);

scanf ("%d %d", &N, &M);
for (int i=1; i<=M; i++)
{
    scanf ("%d", &a[i]);
    s[i] = s[i-1] + a[i];
}

ANS = 0;

for (int i=2; i<=N; i++)
{
    int P, X, Y, V, Z, T;
    scanf ("%d %d %d %d %d %d", &P, &X, &Y, &V, &Z, &T);
    int L, R, qi, qj;
    L = ((unsigned long long) ANS + X) % M + 1;
    R = ((unsigned long long) ANS + Y) % M + 1;
    qi = ((unsigned long long) ANS + Z) % M + 1;
    qj = ((unsigned long long) ANS + T) % M + 1;
    if (P == i-1)
    {
        ANS = s[qj] - s[qi-1];
        U (1, 1, M, L, R, V);
        Q (1, 1, M, qi, qj);
        printf ("%llu\n", ANS);
    }
}

return 0;
}
