#include<iostream>
#include<cstdio>

using namespace std;

const int MAXN= 100010;

int n, m, s;
int a[MAXN];
int it[MAXN*2], lazy[MAXN*2];

void read() {
    int i;
    
    scanf("%d%d", &n, &m);
    
    for(i=1; i<=m; i++) {
        scanf("%d", &a[i]);
    }
}

void fill_it(int idx, int l, int r) {
    if(l == r) {
        it[idx]= a[l];
        return;
    }
    
    int mid= (l+r)/2;
    
    fill_it(idx*2, l, mid);
    fill_it(idx*2+1, mid+1, r);
    
    it[idx]= it[idx*2]+it[idx*2+1];
}

void update(int idx, int l, int r, int ll, int rr, int q) {
    
    if(l>=ll && r<=rr) {
        lazy[idx]+= q;
        return;
    }
    
    int mid= (l+r)/2;
    
    if(l<=ll && mid>=ll) update(idx*2, l, mid, ll, rr, q);
    if(mid<rr && r>=rr) update(idx*2+1, mid+1, r, ll, rr, q);
    
    //it[idx]= it[idx*2]+it[idx*2+1];
}

int find_it(int idx, int l, int r, int ll, int rr) {
    
    if(lazy[idx] != 0) {
        it[idx]+= lazy[idx]; 
        if(l != r) {
            lazy[idx*2] += lazy[idx];
            lazy[idx*2+1] += lazy[idx];
        }
        lazy[idx]= 0;
    }
    
    if(l>=ll && r<=rr) {
        return it[idx];
    }
    
    int mid= (l+r)/2, f=0, s=0;
    
    if(l<=ll && mid>=ll) f= find_it(idx*2, l, mid, ll, min(mid, rr));
    if(mid<rr && r>=rr) s= find_it(idx*2+1, mid+1, r, max(mid+1, ll), rr);
    
    return (f+s);
}

void solve() {
    int i, p, x, y, v, z, t, l, r;
    
    fill_it(1, 1, m);
    
    for(i=1; i<n; i++) {
        scanf("%d%d%d%d%d%d", &p, &x, &y, &v, &z, &t);
        
        l= (x+s)%m+1;
        r= (y+s)%m+1;        
        
        update(1, 1, m, l, r, v);
        
        l= (z+s)%m+1;
        r= (t+s)%m+1;
        
        s= find_it(1, 1, m, l, r);
        printf("%d\n", s);
    }
}

int main (){
    read();
    solve();
    return 0;
}