RT,TLE#24#25,自闭了......
#include<cstdio>
#include<cstring>
#include<iostream>
#define ll long long
const int maxn=4e7+10;
const ll INF=0x3f3f3f3f3f3f3f3f;
int read(){
int sum=0,sg=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')sg=-1;ch=getchar();}
while(ch>='0'&&ch<='9')sum=(sum<<1)+(sum<<3)+ch-'0',ch=getchar();
return sum*sg;
}
int n,ty,que[maxn],hd,tl,pos[maxn];
ll sum[maxn];
ll qval(int x){return sum[x]+sum[x]-sum[pos[x]];}
struct BigInt{
static const int L=9;
static const int mod=1e9;
ll s[15],len;
BigInt(){len=1,memset(s,0,sizeof(s));}
BigInt(ll num){
if(!num)len=1,memset(s,0,sizeof(s));
else{
len=0,memset(s,0,sizeof(s));
while(num)s[++len]=num%mod,num/=mod;
}
}
BigInt operator * (const BigInt& b)const{
BigInt c;
for(int i=1;i<=len;i++){
for(int j=1;j<=b.len;j++){
c.s[i+j-1]+=s[i]*b.s[j];
c.s[i+j]+=c.s[i+j-1]/mod;
c.s[i+j-1]%=mod;
}
}
c.len=len+b.len+1;
while(c.len>1&&!c.s[c.len])c.len--;
return c;
}
BigInt operator + (const BigInt& b)const{
BigInt c;
c.len=std::max(len,b.len);
for(int i=1;i<=c.len;i++){
c.s[i]+=s[i]+b.s[i];
c.s[i+1]+=c.s[i]/mod;
c.s[i]%=mod;
}
c.len++;
while(c.len>1&&!c.s[c.len])c.len--;
return c;
}
void write(){
printf("%lld",s[len]);
for(int i=len-1;i;i--)
printf("%.9lld",s[i]);
puts("");
}
};
BigInt ans;
int main(){
n=read(),ty=read();
if(!ty)
for(int i=1,a;i<=n;i++)a=read(),sum[i]=sum[i-1]+a;
else{
ll x=read(),y=read(),z=read(),b1=read(),b2=read(),b3=0,m=read();
int now=1,lstp=0;
for(int i=1;i<=m;i++){
int p=read(),l=read(),r=read();
for(;now>lstp&&now<=p;now++){
if(now==1)sum[now]=sum[now-1]+b1%(r-l+1)+l;
else if(now==2)sum[now]=sum[now-1]+b2%(r-l+1)+l;
else{
b3=(x*b2+y*b1+z)&((1<<30)-1);
sum[now]=sum[now-1]+b3%(r-l+1)+l;
b1=b2,b2=b3;
}
}
lstp=p;
}
}
hd=1,tl=0,pos[0]=0,que[++tl]=0;
for(int i=1;i<=n;i++){
while(hd+1<=tl&&qval(que[hd+1])<=sum[i])hd++;
pos[i]=que[hd];
while(hd<=tl&&qval(que[tl])>=qval(i))tl--;
que[++tl]=i;
}
for(int i=n;i;i=pos[i])
ans=BigInt(sum[i]-sum[pos[i]])*BigInt(sum[i]-sum[pos[i]])+ans;
ans.write();
return 0;
}