#include <iostream>
#include <algorithm>
#include <fstream>
#include <vector>
using namespace std;


const int MAX_M = 100100;
int v[MAX_M];

class elem {
private :
    long long sum;
    long long lazy;
    int l;

    elem *f1, *f2;

public:
    elem() {
        sum = lazy = l = 0;
        f1 = f2 = NULL;
    }
    void build(int st, int dr) {
        if(st == dr) {
            sum = v[st];
            lazy = 0;
            l = 1;
            f1 = f2 = NULL;
            return;
        }

        int mij = (st + dr) / 2;
        f1 = new elem();
        f1->build(st, mij);
        f2 = new elem();
        f2->build(mij + 1, dr);
        sum = f1->sum + f2->sum + f1->l * f1->lazy + f2->l * f2->lazy;
        l = f1->l + f2->l;
        lazy = 0;
    }

    void update(elem *ant, int st, int dr, int a,  int b, int val) {
        if(st >= a && dr <= b) {
            sum = ant->sum;
            l = ant->l;
            lazy = ant->lazy + val;
            f1 = ant -> f1;
            f2 = ant -> f2;
            return;
        }

        int mij = (st + dr) / 2;
        if(a <= mij) {
            f1 = new elem();
            f1->update(ant->f1, st, mij, a, b, val);
        }
        else {
            f1 = ant -> f1;
        }
        if(b > mij) {
            f2 = new elem();
            f2 -> update(ant->f2, mij + 1, dr, a, b, val);
        }
        else {
            f2 = ant->f2;
        }

        sum = f1->sum + f2->sum + f1->l * f1->lazy + f2->l * f2->lazy;
        l = f1->l + f2->l;
        lazy = ant->lazy;

    }

    long long query(int st, int dr, int a, int b, int lz) {
        lz += lazy;
        if(st >= a && dr <= b) {
            return sum + l * lz;
        }

        long long ans = 0;
        int mij = (st + dr) / 2;
        if(a <= mij) {
            ans += f1->query(st, mij, a, b, lz);
        }
        if(b > mij) {
            ans += f2->query(mij + 1, dr, a, b, lz);
        }
        return ans;
    }
};

elem *R[MAX_M];

int main()
{
    //ifstream cin("fis.in");
    //ofstream cout("fis.out");

    int n, m;
    cin >> n >> m;
    for(int i = 1; i <= m; i++) {
        cin >> v[i];
    }

    int sz;
    for(sz = 1; sz < m; sz *= 2);
    R[1] = new elem();
    R[1]->build(1, sz);

    long long s = 0;
    for(int i = 2; i <= n; i++) {
        int p, x, y, v, z, t;
        cin >> p >> x >> y >> v >> z  >> t;
        int l = (x + s) % m + 1;
        int r = (y + s) % m + 1;
        R[i] = new elem();
        R[i]->update(R[p], 1, sz, l, r, v);

        l = (z + s) % m + 1;
        r = (t + s) % m + 1;
        s = R[i]->query(1, sz, l, r, 0);
        cout << s << '\n';
    }

    return 0;
}
