#include <iostream>
//#include <format>
#include <algorithm>
using namespace std;
const int MAXN = 2e5 + 10;
const long long MOD = 1e9 + 7;
int N, M, Q;
int mask[MAXN];
int preone[MAXN];
bool a[MAXN];
// bin -> dec
long long trans(string str) {
reverse(str.begin(), str.end());
long long val = 1, res = 0;
for (auto ch : str) {
res = (res + (ch - '0') * val) % MOD;
(val <<= 1) %= MOD;
}
return res;
}
int main() {
freopen("Subsequence.in", "r", stdin);
freopen("Subsequence.out", "w", stdout);
cin.tie(0)->sync_with_stdio(false), cout.tie(0);
// read
cin >> N >> M >> Q;
for (int i = 1, l, r; i <= M; ++i) {
cin >> l >> r;
mask[l]++, mask[r + 1]--;
}
// handle reverse by using pre-sum
for (int i = 1; i <= N; ++i) {
mask[i] += mask[i - 1];
a[i] = mask[i] & 1;
preone[i] = a[i - 1] ? i - 1 : preone[i - 1];
}
// fix preone
for (int i = 1; i <= N; ++i) {
if (a[i] & 1) preone[preone[i]] = i;
}
for (int i = 1; i <= N; ++i) {
if ((a[i] & 1) == 0) preone[i] = preone[preone[i]];
}
for (int i = 1; i <= N; ++i) {
if (a[i] & 1) preone[i] = i;
}
// calc ans
for (int l, r, k; Q--; ) {
string ans = "";
cin >> l >> r >> k;
for (int i = preone[l];k;i = preone[i + 1]) {
if (r - i + 1 <= k) {
for (int j = r - k + 1; j <= r; ++j) {
ans += to_string(a[j]);
}
break;
}
ans += "1";
k--;
}
cout << trans(ans) << endl;
}
return 0;
}