#include <bits/stdc++.h>
using namespace std;
const int N = (int)1e4 + 50, K = 1005, mod = (int)1e9 + 7;
int n, m;
int a[N], b[N];
int f[N][K], g[N][K];
inline void inc(int &a, int b) {
a += b;
if(a >= mod) a -= mod;
}
void add(int *dp, int x) {
for(int i = 0; i + x < K; i++) inc(dp[i + x], dp[i]);
}
void del(int *dp, int x) {
for(int i = K - 1; i >= x; i--) inc(dp[i], mod - dp[i - x]);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int T;
cin >> T;
for(int cas = 1; cas <= T; cas++) {
cin >> n >> m;
for(int i = 1; i <= n; i++) {
cin >> a[i] >> b[i];
a[i] = (a[i] + 1) * b[i];
}
for(int j = 0; j < K; j++) {
f[0][j] = (j == 0);
g[0][j] = (j == 0);
}
for(int i = 1; i <= n; i++) {
memcpy(f[i], f[i-1], sizeof(f[i]));
add(f[i], b[i]);
del(f[i], a[i]);
memcpy(g[i], g[i-1], sizeof(g[i]));
add(g[i], a[i]);
del(g[i], b[i]);
}
for(int i = 1; i <= n; i++) {
for(int j = 1; j < K; j++) inc(f[i][j], f[i][j-1]);
}
cout << "Case #" << cas << ":\n";
int ans = 0;
for(int i = 0; i < m; i++) {
int l, r, c; cin >> l >> r >> c;
l = (l + ans) % n + 1;
r = (r + ans) % n + 1;
if(l > r) swap(l, r);
ans = 0;
for(int j = 0; j <= c; j++) inc(ans, (int)(1LL * f[r][j] * g[l-1][c-j] % mod));
cout << ans << '\n';
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTiA9IChpbnQpMWU0ICsgNTAsIEsgPSAxMDA1LCBtb2QgPSAoaW50KTFlOSArIDc7CgppbnQgbiwgbTsKaW50IGFbTl0sIGJbTl07CmludCBmW05dW0tdLCBnW05dW0tdOwoKaW5saW5lIHZvaWQgaW5jKGludCAmYSwgaW50IGIpIHsKICAgIGEgKz0gYjsKICAgIGlmKGEgPj0gbW9kKSBhIC09IG1vZDsKfQoKdm9pZCBhZGQoaW50ICpkcCwgaW50IHgpIHsKICAgIGZvcihpbnQgaSA9IDA7IGkgKyB4IDwgSzsgaSsrKSBpbmMoZHBbaSArIHhdLCBkcFtpXSk7Cn0KCnZvaWQgZGVsKGludCAqZHAsIGludCB4KSB7CiAgICBmb3IoaW50IGkgPSBLIC0gMTsgaSA+PSB4OyBpLS0pIGluYyhkcFtpXSwgbW9kIC0gZHBbaSAtIHhdKTsKfQoKaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwoKICAgIGludCBUOwogICAgY2luID4+IFQ7CiAgICBmb3IoaW50IGNhcyA9IDE7IGNhcyA8PSBUOyBjYXMrKykgewogICAgICAgIGNpbiA+PiBuID4+IG07CiAgICAgICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgY2luID4+IGFbaV0gPj4gYltpXTsKICAgICAgICAgICAgYVtpXSA9IChhW2ldICsgMSkgKiBiW2ldOwogICAgICAgIH0KICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgSzsgaisrKSB7CiAgICAgICAgICAgIGZbMF1bal0gPSAoaiA9PSAwKTsKICAgICAgICAgICAgZ1swXVtqXSA9IChqID09IDApOwogICAgICAgIH0KICAgICAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgICAgICBtZW1jcHkoZltpXSwgZltpLTFdLCBzaXplb2YoZltpXSkpOwogICAgICAgICAgICBhZGQoZltpXSwgYltpXSk7CiAgICAgICAgICAgIGRlbChmW2ldLCBhW2ldKTsKICAgICAgICAgICAgbWVtY3B5KGdbaV0sIGdbaS0xXSwgc2l6ZW9mKGdbaV0pKTsKICAgICAgICAgICAgYWRkKGdbaV0sIGFbaV0pOwogICAgICAgICAgICBkZWwoZ1tpXSwgYltpXSk7CiAgICAgICAgfQogICAgICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgICAgIGZvcihpbnQgaiA9IDE7IGogPCBLOyBqKyspIGluYyhmW2ldW2pdLCBmW2ldW2otMV0pOwogICAgICAgIH0KCiAgICAgICAgY291dCA8PCAiQ2FzZSAjIiA8PCBjYXMgPDwgIjpcbiI7CiAgICAgICAgaW50IGFucyA9IDA7CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG07IGkrKykgewogICAgICAgICAgICBpbnQgbCwgciwgYzsgY2luID4+IGwgPj4gciA+PiBjOwogICAgICAgICAgICBsID0gKGwgKyBhbnMpICUgbiArIDE7CiAgICAgICAgICAgIHIgPSAociArIGFucykgJSBuICsgMTsKICAgICAgICAgICAgaWYobCA+IHIpIHN3YXAobCwgcik7CiAgICAgICAgICAgIGFucyA9IDA7CiAgICAgICAgICAgIGZvcihpbnQgaiA9IDA7IGogPD0gYzsgaisrKSBpbmMoYW5zLCAoaW50KSgxTEwgKiBmW3JdW2pdICogZ1tsLTFdW2Mtal0gJSBtb2QpKTsKICAgICAgICAgICAgY291dCA8PCBhbnMgPDwgJ1xuJzsKICAgICAgICB9CiAgICB9Cn0=