#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef string sg;
const ll NUM = 2e5 + 10, mod = 1e9 + 7;
ll n, m, q;
sg S;
ll mu;
bool dat[3 * NUM];
struct TD {
ll to, w;
} aft[NUM];
TD mem[NUM][62];
int main() {
cin.tie(0), cout.tie(0) -> sync_with_stdio(0);
cin >> n >> m >> q;
cin >> S, S = ' ' + S;
for (ll i = 1; i <= n; i++) {
S[i] == '1'? dat[i] = true: dat[i] = false;
dat[i + n * 2] = dat[i + n] = dat[i];
}
if (m > n) mu = m / n, m = m % n + n, mu = mu - m / n;
ll p = m;
while (!dat[p]) p--;
for (ll i = 1; i <= n; i++) {
ll ext = i + m;
if (dat[ext]) p = ext;
p > i? aft[i].to = p: aft[i].to = i + 1;
aft[i].w = aft[i].to - i + mu * n;
aft[i].w %= mod;
aft[i].to = aft[i].to - aft[i].to / n * n;
if (!aft[i].to) aft[i].to = n;
}
for (ll i = 1; i <= n; i++)
mem[i][0].to = aft[i].to, mem[i][0].w = aft[i].w % mod;
for (ll k = 1; k <= 61; k++) {
for (ll p = 1; p <= n; p++) {
mem[p][k].to = mem[mem[p][k - 1].to][k - 1].to;
mem[p][k].w = (mem[p][k - 1].w + mem[mem[p][k - 1].to][k - 1].w) % mod;
}
}
while (q--) {
ll s, k;
cin >> s >> k;
ll ans = s;
ans = ans % mod;
s = s % n;
if (s == 0) s = n;
ll numb[63], p = 0;
while (k) numb[p++] = (k & 1), k >>= 1;
p--;
ll tmp = 1ll << p;
for (ll i = p; i >= 0; i--) {
if (numb[i] == 1) {
ans = (ans + mem[s][i].w) % mod;
s = mem[s][i].to;
}
}
cout << ans << '\n';
}
return 0;
}