#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
const int N=4e5+5;
char s[N];
int a[N];
int f[65][N];
int g[65][N];
int n,m,q;
signed main(){
scanf("%lld%lld%lld",&n,&m,&q);
cin>>s+1;
int t=0;
for(int i=1;i<=n;i++) if(s[i]=='1') t=i;
for(int i=1;i<=n;i++){
if(s[i]=='1') t=i;
a[i]=t;
}
if(t){for(int i=1;i<=n;i++){
if(i+m<=n){
if(a[i+m]>i){
f[0][i]=a[i+m];
g[0][i]=a[i+m]-i;
}else {
f[0][i]=i%n+1;
g[0][i]=1;
}
}else{
if(m>=n) {
f[0][i]=a[(i+m-1ll)%n+1ll];
g[0][i]=f[0][i]-i+(i+m-1ll)/n*n;
}else{
int x=a[(i+m-1ll)%n+1ll];
if(x>i||x<=(i+m-1ll)%n+1ll){
f[0][i]=a[(i+m-1ll)%n+1ll];
if(x>i)
g[0][i]=f[0][i]-i;
else g[0][i]=f[0][i]+n-i;
}else {
f[0][i]=i%n+1ll;
g[0][i]=1ll;
}
}
}
}}else{
for(int i=1;i<=n;i++) f[0][i]=i+1ll,g[0][i]=1ll;
}
for(int i=1;i<=64;i++){
for(int j=1;j<=n;j++){
f[i][j]=f[i-1][f[i-1][j]];
g[i][j]=(g[i-1][j]+g[i-1][f[i-1][j]])%mod;
}
}
while(q--){
int s,k;
scanf("%lld%lld",&s,&k);
int temp=s%mod;
__int128 ans=0;
s=(s-1)%n+1;
for(int i=63;i>=0;i--){
int c=(1ll<<i);
if(k&c){
ans=(ans+g[i][s])%mod;
s=f[i][s];
k^=(1ll<<i);
}
}
int op=ans%mod;
printf("%lld\n",(op+temp)%mod);
}
return 0;
}