#include<stdio.h>

#define LL long long
#define leftSon node * 2
#define rightSon node * 2 + 1
#define mid (left + right) / 2
const int NMAX = 1e5 + 5;

int n;
LL aint[NMAX * 4], add[NMAX * 4];

void updNode (int node, int left, int right) {
    aint[node] += (LL)add[node] * ((LL)right - left + 1);
    add[leftSon] += add[node];
    add[rightSon] += add[node];

    add[node] = 0;
}

void update (int node, int left, int right, int a, int b, LL val) {
    updNode(node, left, right);

    if(a <= left && b >= right) {
        add[node] += (LL)val;
        updNode(node, left, right);
        return;
    }

    if(a <= mid)
        update(leftSon, left, mid, a, b, val);
    if(b > mid)
        update(rightSon, mid + 1, right, a, b, val);

    updNode(leftSon, left, mid);
    updNode(rightSon, mid + 1, right);
    aint[node] = aint[leftSon] + aint[rightSon];
}

LL query (int node, int left, int right, int a, int b) {
    updNode(node, left, right);

    if(a <= left && b >= right)
        return aint[node];

    updNode(leftSon, left, mid);
    updNode(rightSon, mid + 1, right);
    LL ans = 0;
    if(a <= mid)
        ans += query(leftSon, left, mid, a, b);
    if(b > mid)
        ans += query(rightSon, mid + 1, right, a, b);
    return ans;
}

int main() {
    //freopen("ants.in", "r", stdin);
    //freopen("ants.out", "w", stdout);
    int q, m, p, f, x, y, v, t, z, l, r, i, j, k;
    LL s;
    scanf("%d%d", &q, &n);

    if(n <= 1000 && q <= 1000) {
        int a[1005][1005];
        for(i = 1; i <= n; ++ i)
            scanf("%lld", &a[1][i]);

        s = 0;
        for(k = 2; k <= q; ++ k) {
            scanf("%d%d%d%d%d%d", &p, &x, &y, &v, &z, &t);

            l = ((LL)x + s) % n  + 1;
            r = ((LL)y + s) % n + 1;
            i = ((LL)z + s) % n + 1;
            j = ((LL)t + s) % n + 1;


            for(f = 1; f < l; ++ f)
                a[k][f] = a[p][f];
            for(f = l; f <= r; ++ f)
                a[k][f] = a[p][f] + v;
            for(f = r + 1; f <= n; ++ f)
                a[k][f] = a[p][f];

            s = 0;
            for(f = i; f <= j; ++ f)
                s += a[k][f];
            printf("%lld\n", s);
        }
        return 0;
    }

    for(i = 1; i <= n; ++ i) {
        scanf("%d", &v);
        update(1, 1, n, i, i, v);
    }

    s = 0;
    for(k = 1; k < q; ++ k) {
        scanf("%d%d%d%d%d%d", &p, &x, &y, &v, &z, &t);

        l = (x + s) % n  + 1;
        r = (y + s) % n + 1;
        i = (z + s) % n + 1;
        j = (t + s) % n + 1;

        update(1, 1, n, l, r, v);
        s = query(1, 1, n, i, j);
        printf("%lld\n", s);
    }
    return 0;
}
