link
#include<bits/stdc++.h>
#define lowbit(x) (x&-x)
#define IT set<Node>::iterator
using namespace std;
struct Node
{
int l,r,t;
mutable long long v;
Node(int L,int R=-1,int T=0,long long V=0) : l(L),r(R),t(T),v(V) {}
bool operator < (const Node&ano) const
{
return l<ano.l;
}
};
set<Node> s;
int n,m,q,ll,rr,l[10005],r[100005];
long long v[100005],tr[100005],ans[100005];
void xiu(int x,long long y)
{
if(x<=0)
{
return;
}
while(x<=n)
{
tr[x]+=y;
x+=lowbit(x);
}
}
long long cha(int x)
{
long long ans=0;
while(x>0)
{
ans+=tr[x];
x-=lowbit(x);
}
return ans;
}
IT split(int pos)
{
IT it=s.lower_bound(Node(pos));
if(it->l==pos && it!=s.end())
{
return it;
}
it--;
int L=it->l,R=it->r,T=it->t;
long long V=it->v;
s.erase(it);
s.insert(Node(L,pos-1,T,V));
return s.insert(Node(pos,R,T,V)).first;
}
void assign(int l,int r,int t,long long v)
{
IT itr=split(r+1),itl=split(l);
for(IT it=itl; it!=itr; ++it)
{
xiu(it->t,(long long)-1*(it->r-it->l+1)*it->v);
}
s.erase(itl,itr);
xiu(t,(r-l+1)*v);
s.insert(Node(l,r,t,v));
}
struct Q
{
int l,id;
};
vector<Q> que[100005];
int main()
{
cin>>n>>m>>q;
s.insert(Node(0,m+1));
for(int i=1; i<=n; i++)
{
cin>>l[i]>>r[i]>>v[i];
}
for(int i=1; i<=q; i++)
{
cin>>ll>>rr;
que[rr].emplace_back(Q {ll,i});
}
for(int i=1; i<=n; i++)
{
assign(l[i],r[i],i,v[i]);
for(Q qu:que[i])
{
ans[qu.id]=cha(i)-cha(qu.l-1);
}
}
for(int i=1; i<=q; i++)
{
cout<<ans[i]<<"\n";
}
return 0;
}