#include <cstdio>
#include <vector>
#include <iostream>
#include <queue>

#define DEBUG false

using namespace std;

int n, m;
long long s;

int firstWeight[100007];
long long tree[10000007];
int leaves[100007];

void calcLeaves(int x, int l, int r) {

    if(l == r) {
        leaves[l] = x;
        return;
    }

    calcLeaves(x * 2, l, (l + r) / 2);
    calcLeaves(x * 2 + 1, (l + r) / 2 + 1, r);
}

void initTree(int x, int l, int r) {
    int mid = (l + r) / 2;
    if(mid != l) {
        initTree(x * 2, l, mid);
        initTree(x * 2 + 1, mid + 1, r);
    }
    tree[x] = tree[x * 2] + tree[x * 2 + 1];
}

void initTree() {
   // printf("M - %d", m);
    calcLeaves(1, 1, m);
    for(int i = 1 ; i <= m; i++) {
        tree[leaves[i]] = firstWeight[i];
    }
    initTree(1, 1, m);
}

void updateInt(int x, int l, int r, int ul, int ur, int num) {
    //printf("Im in [%d %d %d], update for %d %d - %d\n", x, l, r, ul, ur, num);
    if(l >= ul && r <= ur) {
        int cnt = (r - l) + 1;
        //printf("Updating tree with %d\n", ((r - l) + 1) * num);
        tree[x] = tree[x] + (num * cnt);
        return;
    }
    int mid = (l + r) / 2;
    if(mid >= ul && r >= ul) {
        updateInt(x * 2, l, mid, ul, ur, num);
    }

    if(ur >= mid + 1 && l <= ur) {
        updateInt(x * 2 + 1, mid + 1, r , ul, ur, num);
    }
}

long long getSum(int x, int l, int r, int ul, int ur) {
   //printf("Im in [%d %d %d], search for %d %d\n", x, l, r, ul, ur);
    if(l >= ul && r <= ur) {
      //  printf("Returning %lld\n", tree[x]);
        return tree[x];
    }
    long long sum = 0;
    int mid = (l + r) / 2;
    if(mid >= ul && r >= ul) {
        sum += getSum(x * 2, l, mid, ul, ur);
    }

    if(ur >= mid + 1 && l <= ur) {
        sum += getSum(x * 2 + 1, mid + 1, r, ul, ur);
    }

    return sum;
}

long long solve(int treeNum, int p, int x, int y,
           int v, int z, int t) {
    int l = ((x + s) % m) + 1;
    int r = ((y + s) % m) + 1;
    int findI = ((z + s) % m) + 1;
    int findJ = ((t + s) % m) + 1;

    if(treeNum == 1) {
      //  printf("m2 - ", m);
        initTree();
        /*for(int i = 0; i <= 7; i++) {
            printf("[%d %d]\n", i, tree[i]);
        }*/
    }

    updateInt(1, 1, m, l, r, v);
   // printf("S - %lld\n", s);


    return getSum(1, 1, m, findI, findJ);
}

struct qq {
    int p, x, y, v, z, t;
};

queue<qq> uh;


void read() {

    int foo, p, x, y, v, z, t;

    qq das;
    bool pos = true;
    int last;

    scanf("%d %d", &n, &m);
    for(int i = 1; i <= m; i++) {
        scanf("%d", &firstWeight[i]);
    }
    for(int i = 0; i < n - 1; i++) {
        scanf("%d %d %d %d %d %d", &das.p, &das.x, &das.y, &das.v, &das.z, &das.t);
        if(i == 0) {
            last = i;
        } else {
            if(last != das.p)
                pos = false;
            last = das.p;
        }
        uh.push(das);
        //printf("%lld\n", solve(i + 1, p, x, y, v, z,t));
    }
    int i = 1;
    long long ans;
    while(!uh.empty()) {
                    das = uh.front();
            uh.pop();
        if(pos) {
            ans = solve(i, das.p, das.x, das.y, das.v, das.z,das.t);
        } else {
            int oops[1024][1024];
            if(i == 1) {
                for(int j = 1; j <= m; j++)
                    oops[0][j] = firstWeight[j];
            }
                int l = ((das.x + s) % m) + 1;
                int r = ((das.y + s) % m) + 1;
                int findI = ((das.z + s) % m) + 1;
                int findJ = ((das.t + s) % m) + 1;
                //printf("%d %d %d %d\n", l, r, findI, findJ);
                for(int j = 1; j <= m; j++) {
                    oops[i][j] = oops[das.p - 1][j];
                    if(j >= l && j <= r) {
                        oops[i][j] += das.v;
                    }

                   // printf("d - %lld %d\n", oops[i][j], das.p);

                    if(j >= findI && j <= findJ) {
                       // printf("add - %d\n", j);
                        ans += oops[i][j];
                    }
                }

        }
                        printf("%lld\n", ans);
                        s = ans;
        i++;
        ans = 0;
    }
}

int main() {

    read();
}
