#include <stdio.h>
#include <algorithm>
#include <vector>
#include <utility>
using namespace std;
#define MN 10000010
struct lin
{
int h,l,r,a;
lin(){}
lin(int x)
{
h=x;
l=r=a=max(x,0);
}
};
lin operator+(const lin&x,const lin&y)
{
lin rt;
rt.h=x.h+y.h;
rt.l=max(x.l,x.h+y.l);
rt.r=max(y.r,x.r+y.h);
rt.a=max(x.r+y.l,max(x.a,y.a));
return rt;
}
int cl[MN],cr[MN],sl;lin zz[MN];
int add(int i,int l,int r,int j,int x)
{
int rt=++sl;
if(l+1==r)
{
zz[rt]=zz[i].h+x;
return rt;
}
cl[rt]=cl[i];cr[rt]=cr[i];
int m=(l+r)>>1;
if(j<m)cl[rt]=add(cl[i],l,m,j,x);
else cr[rt]=add(cr[i],m,r,j,x);
zz[rt]=zz[cl[i]]+zz[cr[i]];
return rt;
}
lin sum(int i,int l,int r,int L,int R)
{
if(R<=l||r<=L||i==0)return 0;
if(L<=l&&r<=R)return zz[i];
int m=(l+r)>>1;
return sum(cl[i],l,m,L,R)+sum(cr[i],m,r,L,R);
}
vector<pair<int,int> > ve[300010];int ro[300010];
int main()
{
int n,m,k,q;
scanf("%d%d%d",&n,&m,&k);
for(int i=0;i<k;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
ve[x].push_back(make_pair(y,z));
}
ro[0]=0;
for(int i=1;i<=n;i++)
{
int rr=ro[i-1];
for(auto t:ve[i])
rr=add(rr,1,m+1,t.first,t.second);
ro[i]=rr;
}
int ah=0,al=0,ar=0;
scanf("%d",&q);
while(q--)
{
int h,l,r;
scanf("%d%d%d",&h,&l,&r);
h^=ah;l^=al;r^=ar;
lin z=sum(ro[h],1,m+1,l,r+1);
ah=al;al=ar;ar=z.a;
printf("%d\n",ar);
}
return 0;
}