#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ar3 = array<int,3>;
const int mxN = (int)2e5+2;
const int INF = (int)1e9+1;
const ll MOD = (ll)1e9+7;
const int sqMX = 1<<15;
ll p2[2][sqMX];
ll poww2(ll b){ return (p2[1][b/sqMX]*p2[0][b&(sqMX-1)])%MOD; }
void preComputePowers(){
p2[0][0]=p2[1][0]=1;
for(int i = 1; i < sqMX; i++)
p2[0][i]=(p2[0][i-1]*2)%MOD;
ll bigSq = (p2[0][sqMX-1]*2)%MOD;
for(int i = 1; i < sqMX; i++)
p2[1][i]=(p2[1][i-1]*bigSq)%MOD;
}
template<int MX, int SZ>
struct SparseLazySegTree{
bitset<SZ> lz;
ar3 seg[SZ], emp;
int L[SZ], R[SZ], IND;
void init(){
lz.reset(); IND = 1;
memset(L,0,sizeof(L));
memset(R,0,sizeof(R));
seg[1]={0,0,MX}; emp={0,0,0};
}
void apply(int p, int l, int r){
int sz = seg[p][2];
seg[p][0]=sz-seg[p][0];
ll xd =poww2(sz)-1;
xd+=MOD-(ll)seg[p][1];
xd%=MOD; seg[p][1]=xd;
lz[p]=1-lz[p];
}
void prop(int p, int l, int r){
if(!p or !lz[p] or l==r) return; int mid = (l+r)/2;
if(!L[p]) L[p]=++IND,seg[L[p]]=ar3({0,0,mid-l+1});
if(!R[p]) R[p]=++IND,seg[R[p]]=ar3({0,0,r-mid});
apply(L[p],l,mid); apply(R[p],mid+1,r); lz[p]=0;
}
ar3 comb(ar3 &a, ar3 &b){
ar3 c = a; c[0]+=b[0]; c[2]+=b[2];
ll xd = a[1]; xd*=poww2(b[2]); xd+=(ll)b[1];
xd%=MOD; c[1] = xd; return c;
}
void updtoggle(int i, int j, int p=1, int l=1, int r=MX){
if(i>r or j<l or i>j or !p) return; prop(p,l,r);
if(i<=l and r<=j){ apply(p,l,r); return; }
int mid = (l+r)/2;
if(!L[p]) L[p]=++IND,seg[L[p]]=ar3({0,0,mid-l+1});
if(!R[p]) R[p]=++IND,seg[R[p]]=ar3({0,0,r-mid});
updtoggle(i,j,L[p],l,mid);
updtoggle(i,j,R[p],mid+1,r);
seg[p] = comb(seg[L[p]],seg[R[p]]);
}
ar3 query(int i, int j, int p=1, int l=1, int r=MX){
if(i>r or j<l or i>j or !p) return emp; prop(p,l,r);
if(i<=l and r<=j) return seg[p];
int mid = (l+r)/2;
auto le = query(i,j,L[p],l,mid);
if(!R[p]) return le;
auto ri = query(i,j,R[p],mid+1,r);
if(!L[p]) return ri;
return comb(le,ri);
}
int findKthZero(int k, int p=1, int l=1, int r=MX){
if(l==r) return l; prop(p,l,r);
int mid = (l+r)/2;
if(!L[p]) return l+k-1;
int num = mid-l+1-seg[L[p]][0];
if(num<k){
if(!R[p]) return mid+k-num;
return findKthZero(k-num,R[p],mid+1,r);
}
return findKthZero(k,L[p],l,mid);
}
};
SparseLazySegTree<INF,__lg(INF)*mxN*2> seg;
ll n, m, q, l, r, k, ans;
int main(){
ios_base::sync_with_stdio(false); cin.tie(0);
cin >> n >> m >> q;
preComputePowers(); seg.init();
while(m--) cin >> l >> r, seg.updtoggle(l,r);
while(q--){
cin >> l >> r >> k;
auto cur = seg.query(l,r);
if(cur[0]>=k) ans = (poww2(k)-1+MOD)%MOD;
else{
int L = seg.findKthZero(r-seg.query(1,r)[0]-(k-cur[0])+1);
auto lol = seg.query(L,r);
ans = poww2(cur[0]-lol[0])-1;
ans*=poww2(r-L+1); ans+=(ll)lol[1]; ans%=MOD;
}
cout << ans << "\n";
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyBsbCA9IGxvbmcgbG9uZzsKdXNpbmcgYXIzID0gYXJyYXk8aW50LDM+OwoKY29uc3QgaW50IG14TiA9IChpbnQpMmU1KzI7CmNvbnN0IGludCBJTkYgPSAoaW50KTFlOSsxOwpjb25zdCBsbCBNT0QgPSAobGwpMWU5Kzc7CmNvbnN0IGludCBzcU1YID0gMTw8MTU7CmxsIHAyWzJdW3NxTVhdOwoKbGwgcG93dzIobGwgYil7IHJldHVybiAocDJbMV1bYi9zcU1YXSpwMlswXVtiJihzcU1YLTEpXSklTU9EOyB9Cgp2b2lkIHByZUNvbXB1dGVQb3dlcnMoKXsKCXAyWzBdWzBdPXAyWzFdWzBdPTE7Cglmb3IoaW50IGkgPSAxOyBpIDwgc3FNWDsgaSsrKQoJCXAyWzBdW2ldPShwMlswXVtpLTFdKjIpJU1PRDsKCWxsIGJpZ1NxID0gKHAyWzBdW3NxTVgtMV0qMiklTU9EOwoJZm9yKGludCBpID0gMTsgaSA8IHNxTVg7IGkrKykKCQlwMlsxXVtpXT0ocDJbMV1baS0xXSpiaWdTcSklTU9EOwp9Cgp0ZW1wbGF0ZTxpbnQgTVgsIGludCBTWj4Kc3RydWN0IFNwYXJzZUxhenlTZWdUcmVlewoJYml0c2V0PFNaPiBsejsKCWFyMyBzZWdbU1pdLCBlbXA7CglpbnQgTFtTWl0sIFJbU1pdLCBJTkQ7CgkKCXZvaWQgaW5pdCgpewoJCWx6LnJlc2V0KCk7IElORCA9IDE7IAogICAgICAgIG1lbXNldChMLDAsc2l6ZW9mKEwpKTsKICAgICAgICBtZW1zZXQoUiwwLHNpemVvZihSKSk7CiAgICAgICAgc2VnWzFdPXswLDAsTVh9OyBlbXA9ezAsMCwwfTsKCX0KCQoJdm9pZCBhcHBseShpbnQgcCwgaW50IGwsIGludCByKXsKCQlpbnQgc3ogPSBzZWdbcF1bMl07CgkJc2VnW3BdWzBdPXN6LXNlZ1twXVswXTsKICAgICAgICBsbCB4ZCA9cG93dzIoc3opLTE7CiAgICAgICAgeGQrPU1PRC0obGwpc2VnW3BdWzFdOwogICAgICAgIHhkJT1NT0Q7IHNlZ1twXVsxXT14ZDsKCQlseltwXT0xLWx6W3BdOwoJfQoJCgl2b2lkIHByb3AoaW50IHAsIGludCBsLCBpbnQgcil7CgkJaWYoIXAgb3IgIWx6W3BdIG9yIGw9PXIpIHJldHVybjsgaW50IG1pZCA9IChsK3IpLzI7CgkJaWYoIUxbcF0pIExbcF09KytJTkQsc2VnW0xbcF1dPWFyMyh7MCwwLG1pZC1sKzF9KTsKCQlpZighUltwXSkgUltwXT0rK0lORCxzZWdbUltwXV09YXIzKHswLDAsci1taWR9KTsKCQlhcHBseShMW3BdLGwsbWlkKTsgYXBwbHkoUltwXSxtaWQrMSxyKTsgbHpbcF09MDsKCX0KCQoJYXIzIGNvbWIoYXIzICZhLCBhcjMgJmIpewoJCWFyMyBjID0gYTsgY1swXSs9YlswXTsgY1syXSs9YlsyXTsKCQlsbCB4ZCA9IGFbMV07IHhkKj1wb3d3MihiWzJdKTsgeGQrPShsbCliWzFdOyAKCQl4ZCU9TU9EOyBjWzFdID0geGQ7IHJldHVybiBjOwoJfQoJCgl2b2lkIHVwZHRvZ2dsZShpbnQgaSwgaW50IGosIGludCBwPTEsIGludCBsPTEsIGludCByPU1YKXsKCQlpZihpPnIgb3IgajxsIG9yIGk+aiBvciAhcCkgcmV0dXJuOyBwcm9wKHAsbCxyKTsKCQlpZihpPD1sIGFuZCByPD1qKXsgYXBwbHkocCxsLHIpOyByZXR1cm47IH0KCQlpbnQgbWlkID0gKGwrcikvMjsKCQlpZighTFtwXSkgTFtwXT0rK0lORCxzZWdbTFtwXV09YXIzKHswLDAsbWlkLWwrMX0pOwoJCWlmKCFSW3BdKSBSW3BdPSsrSU5ELHNlZ1tSW3BdXT1hcjMoezAsMCxyLW1pZH0pOwoJCXVwZHRvZ2dsZShpLGosTFtwXSxsLG1pZCk7CgkJdXBkdG9nZ2xlKGksaixSW3BdLG1pZCsxLHIpOwoJCXNlZ1twXSA9IGNvbWIoc2VnW0xbcF1dLHNlZ1tSW3BdXSk7Cgl9CgkKCWFyMyBxdWVyeShpbnQgaSwgaW50IGosIGludCBwPTEsIGludCBsPTEsIGludCByPU1YKXsKCQlpZihpPnIgb3IgajxsIG9yIGk+aiBvciAhcCkgcmV0dXJuIGVtcDsgcHJvcChwLGwscik7CgkJaWYoaTw9bCBhbmQgcjw9aikgcmV0dXJuIHNlZ1twXTsKCQlpbnQgbWlkID0gKGwrcikvMjsKCQlhdXRvIGxlID0gcXVlcnkoaSxqLExbcF0sbCxtaWQpOwoJCWlmKCFSW3BdKSByZXR1cm4gbGU7CgkJYXV0byByaSA9IHF1ZXJ5KGksaixSW3BdLG1pZCsxLHIpOwoJCWlmKCFMW3BdKSByZXR1cm4gcmk7CgkJcmV0dXJuIGNvbWIobGUscmkpOwoJfQoKICAgIGludCBmaW5kS3RoWmVybyhpbnQgaywgaW50IHA9MSwgaW50IGw9MSwgaW50IHI9TVgpewogICAgICAgIGlmKGw9PXIpIHJldHVybiBsOyBwcm9wKHAsbCxyKTsKICAgICAgICBpbnQgbWlkID0gKGwrcikvMjsKICAgICAgICBpZighTFtwXSkgcmV0dXJuIGwray0xOwogICAgICAgIGludCBudW0gPSBtaWQtbCsxLXNlZ1tMW3BdXVswXTsKICAgICAgICBpZihudW08ayl7CiAgICAgICAgICAgIGlmKCFSW3BdKSByZXR1cm4gbWlkK2stbnVtOwogICAgICAgICAgICByZXR1cm4gZmluZEt0aFplcm8oay1udW0sUltwXSxtaWQrMSxyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZpbmRLdGhaZXJvKGssTFtwXSxsLG1pZCk7CiAgICB9Cn07CgpTcGFyc2VMYXp5U2VnVHJlZTxJTkYsX19sZyhJTkYpKm14TioyPiBzZWc7CmxsIG4sIG0sIHEsIGwsIHIsIGssIGFuczsKCmludCBtYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZSgwKTsKICAgIGNpbiA+PiBuID4+IG0gPj4gcTsgCiAgICBwcmVDb21wdXRlUG93ZXJzKCk7IHNlZy5pbml0KCk7CiAgICB3aGlsZShtLS0pIGNpbiA+PiBsID4+IHIsIHNlZy51cGR0b2dnbGUobCxyKTsKCXdoaWxlKHEtLSl7CgkJY2luID4+IGwgPj4gciA+PiBrOwoJCWF1dG8gY3VyID0gc2VnLnF1ZXJ5KGwscik7CgkJaWYoY3VyWzBdPj1rKSBhbnMgPSAocG93dzIoayktMStNT0QpJU1PRDsKCQllbHNlewogICAgICAgICAgICBpbnQgTCA9IHNlZy5maW5kS3RoWmVybyhyLXNlZy5xdWVyeSgxLHIpWzBdLShrLWN1clswXSkrMSk7CgkJCWF1dG8gbG9sID0gc2VnLnF1ZXJ5KEwscik7CgkJCWFucyA9IHBvd3cyKGN1clswXS1sb2xbMF0pLTE7CgkJCWFucyo9cG93dzIoci1MKzEpOyBhbnMrPShsbClsb2xbMV07IGFucyU9TU9EOwoJCX0KCQljb3V0IDw8IGFucyA8PCAiXG4iOwoJfQp9Cg==