#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, int 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];
}

int 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);
    int 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, x, y, v, t, z, l, r, i, j, k;
    LL s;
    scanf("%d%d", &q, &n);
    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 = ((LL)x + s) % n  + 1;
        r = ((LL)y + s) % n + 1;
        i = ((LL)z + s) % n + 1;
        j = ((LL)t + s) % n + 1;

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