#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<map>
#define re register
#define ll __int128
using namespace std;
const ll mod=1e9+7;
ll n,m;
long long nn,mm;
int q;
char s[200005];
ll sum[200005];
ll f[200005][65];//62
ll calc(ll x){
return sum[x%n]+sum[n]*(x/n);
}
ll query(ll l,ll r){
return calc(r)-calc(l-1);
}
ll mo(ll x){
if(x%n==0) return n;
return x%n;
}
inline ll rd()
{
ll x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9')
x=x*10+ch-'0',ch=getchar();
return x*f;
}
int main(){
n=rd(),m=rd();
scanf("%d%s",&q,s+1);
for(int i=1;i<=n;++i){
sum[i]=sum[i-1]+(ll)(s[i]=='1');
}
for(int i=1;i<=n;++i){
ll l=(ll)i+1,r=(ll)i+(ll)m,mid;
while(l<r){
mid=(l+r+1)>>1;
if(query(mid,i+(ll)m)>=1) l=mid;
else r=mid-1;
}
if(query(l,l)>=1) f[i][0]=l-i;
else f[i][0]=1;
}
// cout<<"*"<<f[1][0]<<" "<<f[2][0]<<" "<<mo(1+f[1][0])<<" "<<f[1][1]<<endl;
for(ll j=1;j<=62;++j){
for(ll i=1;i<=n;++i){
f[i][j]=f[i][j-1]+f[mo(i+f[i][j-1])][j-1];
// cout<<i<<" "<<j<<" "<<f[i][j]<<" "<<f[i][j-1]<<" "<<f[mo(i+f[i][j-1])][j-1]<<endl;
}
}
while(q--){
ll s,k;
s=rd(),k=rd();
ll ans=s%mod;
for(ll i=0;i<62;++i){
if(k&((ll)1<<i)){
s%=n;
if(s==0) s=n;
ans=(ans+f[s][i])%mod;
s+=f[s][i];
// cout<<"//"<<s<<endl;
}
}
printf("%lld\n",(long long )ans);
}
return 0;
}