QAQ
#include<cstdio>
#include<algorithm>
using namespace std;
#define N 100005
#define mid (l+r>>1)
int n,m,len,last=1,tot;
int s[N],e[N],p[N];
int num[N<<4],sum[N<<4];
int ch[N<<4][2],root[N];
struct node{
int pos,val;
}q[N];
bool operator<(node a,node b){
return a.pos<b.pos;
}
int b[N];
void insert(int &x,int pre,int l,int r,int pos,int k){
if(!x) x=++tot;
sum[x]=sum[pre]+k*b[pos];
num[x]=num[pre]+k;
printf("insert %d %d %d %d\n",l,r,num[x],sum[x]);
if(l==r) return;
if(pos<=mid) ch[x][1]=ch[pre][1],insert(ch[x][0],ch[pre][0],l,mid,pos,k);
else ch[x][0]=ch[pre][0],insert(ch[x][1],ch[pre][1],mid+1,r,pos,k);
}
int query(int x,int l,int r,int k){
int d=num[ch[x][0]];
printf("query %d %d %d %d %d %d\n",l,r,num[x],sum[x],d,k);
if(l==r) {
return k*b[l];
// if(k>=num[x]) return sum[x];
// return 0;
}
if(k<=d) return query(ch[x][0],l,mid,k);
else return query(ch[x][1],mid+1,r,k-d)+sum[ch[x][0]];
}
void print(int x,int l,int r){
printf("%d %d %d num %d sum %d\n",x,l,r,num[x],sum[x]);
if(l==r) return;
print(ch[x][0],l,mid);
print(ch[x][1],mid+1,r);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d%d%d",s+i,e+i,p+i);
b[i]=p[i];
}
sort(b+1,b+n+1);
len=unique(b+1,b+n+1)-b-1;
for(int i=1;i<=n;i++){
q[i]=(node){s[i],lower_bound(b+1,b+len+1,p[i])-b};
q[i+n]=(node){e[i]+1,-(lower_bound(b+1,b+len+1,p[i])-b)};
}
sort(q+1,q+2*n+1);
for(int i=1;i<=2*n;i++){
printf("add %d %d\n",q[i].pos,b[q[i].val]);
if(q[i].val<0){
if(q[i-1].pos==q[i].pos)insert(root[q[i].pos],root[q[i].pos],1,len,-q[i].val,-1);
else insert(root[q[i].pos],root[q[i].pos-1],1,len,-q[i].val,-1);
}
else{
if(q[i-1].pos==q[i].pos) insert(root[q[i].pos],root[q[i].pos],1,len,q[i].val,1);
else insert(root[q[i].pos],root[q[i].pos-1],1,len,q[i].val,1);
}
print(root[q[i].pos],1,len);
puts("");
// printf("%d %d %d\n",q[i].pos,q[i].val,q[i].val<0?-1:1);
}
for(int i=1;i<=m;i++){
print(root[i],1,len);
puts("");
}
// for(int i=1;i<=2*n;i++)
// if(!root[i]) root[i]=root[i-1];
for(int i=1;i<=m;i++){
int x,a,b,c;
scanf("%d%d%d%d",&x,&a,&b,&c);
int k=1+(a*last+b)%c;
printf("%d\n",query(root[x],1,len,k));
}
}