#include<fstream>
#include<iostream>
#include<cstdio>

#define D 4
#define N 100100

#define f cin
#define g cout

using namespace std;

//ifstream f("ants.in");
//ofstream g("ants.out");

int n,m,i,p,r,li,ls,x,poz = D,y,l,v,z,t,a[N];

char buf[D];

long long s;

struct arbint{long long lazy,s;}aint[N * 4];

inline void build(int nod,int li,int ls){
    if(li == ls)
    {
        aint[nod].s = a[li];

        return;
    }

    int mij = (li + ls) >> 1;

    build(nod << 1, li, mij);
    build((nod << 1) | 1, mij + 1, ls);

    aint[nod].s = aint[nod << 1].s + aint[(nod << 1) | 1].s;
}

inline void update(int nod,int li,int ls,int st,int dr,int val){
    if(st <= li && ls <= dr)
    {
        aint[nod].lazy += val;
        aint[nod].s += 1LL * val * (ls - li + 1);

        return;
    }

    int mij = (li + ls) >> 1;

    if(aint[nod].lazy)
    {
        aint[nod << 1].s += 1LL * aint[nod].lazy * (mij - li + 1);
        aint[nod << 1].lazy += 1LL * aint[nod].lazy;

        aint[(nod << 1) | 1].s += 1LL * aint[nod].lazy * (ls - mij);
        aint[(nod << 1) | 1].lazy += 1LL * aint[nod].lazy;

        aint[nod].lazy = 0;
    }

    if(st <= mij)
        update(nod << 1, li, mij, st, dr, val);
    if(dr > mij)
        update((nod << 1) | 1, mij + 1, ls, st, dr, val);

    aint[nod].s = aint[nod << 1].s + aint[(nod << 1) | 1].s;
}

inline long long query(int nod,int li,int ls,int st,int dr){
    if(st <= li && ls <= dr)
        return aint[nod].s;

    int mij = (li + ls) >> 1;

    if(aint[nod].lazy)
    {
        aint[nod << 1].s += 1LL * aint[nod].lazy * (mij - li + 1);
        aint[nod << 1].lazy += 1LL * aint[nod].lazy;

        aint[(nod << 1) | 1].s += 1LL * aint[nod].lazy * (ls - mij);
        aint[(nod << 1) | 1].lazy += 1LL * aint[nod].lazy;

        aint[nod].lazy = 0;
    }

    long long x = 0;

    if(st <= mij)
        x += query(nod << 1, li, mij, st, dr);
    if(mij < dr)
        x += query((nod << 1) | 1, mij + 1, ls, st, dr);

    return x;
}

inline int ianr(){
    while('0' > buf[poz] || '9' < buf[poz])
        if(++poz >= D)
            fread(buf, 1, D, stdin),poz = 0;

    int nr = 0;

    while('0' <= buf[poz] && buf[poz] <= '9')
    {
        nr = nr * 10 + buf[poz] - '0';

        if(++poz >= D)
            fread(buf, 1, D, stdin),poz = 0;
    }
}

int main()
{
    f >> n >> m;

    for(i = 1; i <= m; ++i)
        f >> a[i];

    build(1,1,m);

    for(i = 1; i < n; ++i)
    {
        f >> p >> x >> y >> v >> z >> t;

        l = ((x + s) % m) + 1;
        r = ((y + s) % m) + 1;

        update(1,1,m,l,r,v);

        li = ((z + s) % m) + 1;
        ls = ((t + s) % m) + 1;

        s = query(1, 1, m, li, ls);

        g << s << '\n';
    }

    return 0;
}
