#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);
    s = getSum(1, 1, m, findI, findJ);
   // printf("S - %lld\n", s);


    return s;
}

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 {
            last = pos != das.p;
            pos = das.p;
        }
        uh.push(das);
        //printf("%lld\n", solve(i + 1, p, x, y, v, z,t));
    }
    int i = 1;
    while(!uh.empty()) {
        das = uh.front();
        uh.pop();
        printf("%lld\n", solve(i++, das.p, das.x, das.y, das.v, das.z,das.t));
    }
}

int main() {

    read();
}
