#include <iostream>
#include <vector>

using namespace std;

const int NMAX = 100000 + 1;
const int MMAX = 100000 + 1;

int n, m, crt;
long long v[MMAX];
long long t[NMAX], stanga[NMAX], dreapta[NMAX], valoare[NMAX], sol[NMAX];
vector <int> fii[NMAX];

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

inline void push(int tata, int l, int r, int v) {
    t[++crt] = tata;
    stanga[crt] = l;
    dreapta[crt] = r;
    valoare[crt] = v;
    sol[crt] = 0;
}

inline long long minim(long long a, long long b) {
    if (a > b) return b;
    return a;
}
inline long long maxim(long long a, long long b) {
    if (a < b) return b;
    return a;
}

void solutie(int i, int j, int p, int x) {
    fii[p].push_back(x);
    long long s = 0;
    while (t[p] != p) {
        if (stanga[p] >= i && stanga[p] <= j) s += (minim(j, dreapta[p]) - stanga[p] + 1) * valoare[p];
        else if (dreapta[p] <= j && dreapta[p] >= i) s += (dreapta[p] - maxim(i, stanga[p]) + 1) * valoare[p];
        p = t[p];
    }
    long long added = 0;
    //cout << endl << stanga[x] << ' ' << dreapta[x] << ' ' << i << ' ' << j << ' ' << valoare[x] << endl;
    if (stanga[x] >= i && stanga[x] <= j) added += (minim(j, dreapta[x]) - stanga[x] + 1) * valoare[x];
    else if (dreapta[x] <= j && dreapta[x] >= i) added += (dreapta[x] - maxim(i, stanga[x]) + 1) * valoare[x];
    s += v[j] - v[i - 1] + added;
    sol[x] = s;
    cout << s << '\n';
}

void rezolva() {
    int x, y, v, z, t, l, r, p, a, b, s;
    for (int i = 2; i <= n; i++) {
        cin >> p >> x >> y >> v >> z >> t;
        s = sol[p];
        l = ((x + s) % m) + 1; r = ((y + s) % m) + 1;
        a = ((z + s) % m) + 1; b = ((t + s) % m) + 1;
        push(p, l, r, v);
        solutie(a, b, p, i);
       // orase.push_back(orase[p], l, r, v);
    }
}

int main() {
    citeste();
    push(1, 1, m, 0);
    rezolva();
    return 0;
}
