#include <cassert>

#include <algorithm>
#include <fstream>
#include <iostream>
using namespace std;
const int MAX_N = 100005;

long long s, sum[MAX_N * 6];
long long lazy[MAX_N * 6];
int a[MAX_N];

void build_stree(int node, int left, int right) {
    if (left == right) {
        sum[node] = a[left];
    } else {
        int middle = (left + right) / 2;
        build_stree(2 * node, left, middle);
        build_stree(2 * node + 1, middle + 1, right);
        sum[node] = sum[2 * node] + sum[2 * node + 1];
    }
}

inline void LAZY(int node, int left, int right) {
    if (left < right) {
        lazy[2 * node] += lazy[node];
        lazy[2 * node + 1] += lazy[node];
        sum[node] += lazy[node] * (right - left + 1);
        lazy[node] = 0;
    } else {
        sum[node] += lazy[node];
        lazy[node] = 0;
    }
}

void update(int node, int left, int right, int x, int y, int value) {
    if (x <= left && right <= y) {
        lazy[node] += value;
    } else {
        int middle = (left + right) / 2;
        if (x <= middle) {
            update(2 * node, left, middle, x, y, value);
        }
        if (y > middle) {
            update(2 * node + 1, middle + 1, right, x, y, value);
        }
    }
    if (left < right) {
        LAZY(2 * node, left, (left + right) / 2);
        LAZY(2 * node + 1, (left + right) / 2 + 1, right);
        sum[node] = sum[2 * node] + sum[2 * node + 1];
    } else {
        LAZY(node, left, right);
    }
}

void query(int node, int left, int right, int x, int y) {
    LAZY(node, left, right);
    if (x <= left && right <= y) {
        s += sum[node];
    } else {
        int middle = (left + right) / 2;
        if (x <= middle) {
            query(2 * node, left, middle, x, y);
        }
        if (y > middle) {
            query(2 * node + 1, middle + 1, right, x, y);
        }
    }
}

int main() {
    ///ifstream cin("f.in");
    int n, m;
    cin >> m >> n;
    for (int i = 1; i <= n; ++ i) {
        cin >> a[i];
    }
    build_stree(1, 1, n);
    for (int i = 2; i <= m; ++ i) {
        int p, x, y, v, z, t;
        cin >> p >> x >> y >> v >> z >> t;
        assert(p == i - 1);
        x = (x + s) % n + 1; y = (y + s) % n + 1;
        z = (z + s) % n + 1; t = (t + s) % n + 1;
        update(1, 1, n, x, y, v);
        s = 0; query(1, 1, n, z, t);
        cout << s << "\n";
    }
    return 0;
}
