#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll read() {
ll n=0,f=1;
char ch=getchar();
while(ch<'0' || ch>'9') {
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9') {
n=(n<<1)+(n<<3)+ch-'0';
ch=getchar();
}
return f==1?n:-n;
}
void write(ll x) {
if(x<0) {
putchar('-');
x=-x;
}
if(x>9) write(x/10);
putchar((x%10)+'0');
}
const int N=2e5+7,K=63;
const ll MOD=1e9+7;
int n,q;
ll m;
char str[N<<2];
void input() {
n=read(),m=read(),q=read();
scanf("%s",str+1);
}
ll f[N][K];
//f[i]¾¹ý2^k´ÎÒÆ¶¯,ÍùºóÒÆ¶¯f[i][k]¸öµ¥Î»,1<=i<=n,f[i][k]ÕæÊµÖµ
ll p2[K];
//p2[i]:2^i
void init() {
//f[i][0]
if(m<n) {
//m<n
ll last=0;
for(int i=2;i<=m;i++)
if(str[i]=='1')
last=i;
for(int i=1;i<=n;i++) {
if(str[i+m]=='1') last=i+m;
if(last>=i+1 && last<=m+i)
f[i][0]=last-i;
else
f[i][0]=1;
}
}else{
//m>=n
bool one=0;
for(int i=1;i<=n;i++)
if(str[i]=='1') {
one=1;
break;
}
if(!one) {
for(int i=1;i<=n;i++)
f[i][0]=1;
}else{
//have '1'
ll r=m%n;
ll p=(m-r)/n;
ll last=0;
for(int i=1;i<=n;i++)
if(str[i+1]=='1')
last=1+(p-1)*n+i;
for(int i=1;i<r;i++)
if(str[i+1]=='1')
last=1+p*n+i;
for(int i=1;i<=n;i++) {
if(str[i+r]=='1') last=i+p*n+r;
if(last>=i+1 && last<=m+i)
f[i][0]=last-i;
else
f[i][0]=1;
}
}
}
for(int i=1;i<=n;i++)
f[i][0]%=MOD;
for(int k=1;k<K;k++) {
for(int i=1;i<=n;i++) {
ll p=(i+f[i][k-1]-1)%n+1;
f[i][k]=(f[i][k-1]+f[p][k-1])%MOD;
}
}
p2[0]=1;
for(int i=1;i<K;i++)
p2[i]=p2[i-1]<<1;
}
void work() {
for(int i=1;i<=n;i++)
str[i+2*n]=str[i+n]=str[i];
init();
while(q--) {
ll s,k;
s=read(),k=read();
ll st=(s-1)%n+1;
ll dis=s-st;
ll ans=st;
for(int t=K-1;t>=0;t--) {
if(k>=p2[t]) {
ans=(ans+f[st][t])%MOD;
st=(st+f[st][t]-1)%n+1;
k-=p2[t];
}
}
ans=(ans+dis)%MOD;
write(ans),putchar('\n');
}
}
int main() {
input();
work();
return 0;
}