#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;

const int N = 101000;

struct nod {
    int f1, f2;
    long long sum, vint;
};

int n, m, a[N], rad[N];
long long rez = 0;

int val, poz1, poz2, q1, q2, nodc;
nod v[N * 100];

void build(int &no, int pozx, int pozy) {
    ++nodc;
    v[nodc] = v[no];
    no = nodc;
    
    if(pozx == pozy) {
        v[no].sum = a[pozx];
        return;
    }
    
    int mid = (pozx + pozy) / 2;
    
    build(v[no].f1, pozx, mid);
    build(v[no].f2, mid + 1, pozy);
    
    v[no].sum = v[v[no].f1].sum + v[v[no].f2].sum;
}

void update(int &no, int pozx, int pozy) {
    ++nodc;
    v[nodc] = v[no];
    no = nodc;
    
    if(pozx >= poz1 && poz2 >= pozy) {
        v[no].vint += val;
        v[no].sum += val * (pozy - pozx + 1);
        return;
    }
    
    int mid = (pozx + pozy) / 2;
    if(mid >= poz1)
        update(v[no].f1, pozx, mid);
    if(mid < poz2)
        update(v[no].f2, mid + 1, pozy);
    
    v[no].sum = v[v[no].f1].sum + v[v[no].f2].sum + v[no].vint * (pozy - pozx + 1);
}

long long query(int no, int pozx, int pozy) {
    if(pozx >= q1 && q2 >= pozy)
        return v[no].sum;
    
    int mid = (pozx + pozy) / 2;
    long long rez = v[no].vint * (min(pozy, q2) - max(pozx, q1) + 1);
    
    if(mid >= q1)
        rez += query(v[no].f1, pozx, mid);
    if(mid < q2)
        rez += query(v[no].f2, mid + 1, pozy);
    
    return rez;
}

int main() {
    int i;
    //freopen("ttt", "r", stdin);
    
    cin >> n >> m;
    
    for(i = 1; i <= m; ++i)
        cin >> a[i];
        
    build(rad[1], 1, m);
    
    for(i = 2; i <= n; ++i) {
        int p, x, y, z, t;
        cin >> p >> x >> y >> val >> z >> t;
        
        int ra = (rez % m);
        
        poz1 = (x + ra) % m + 1;
        poz2 = (y + ra) % m + 1;
        
        q1 = (z + ra) % m + 1;
        q2 = (t + ra) % m + 1;
        
        if(poz1 > poz2)
            swap(poz1, poz2);
        if(q1 > q2)
            swap(q1, q2);
        
        rad[i] = rad[p];
        update(rad[i], 1, m);
        
        rez = query(rad[i], 1, m);
        
        cout << rez << "\n";
    }
    
    return 0;
}
