#include<bits/stdc++.h>
using namespace std;
const int N=2e5+1e4;
const long long mod=1e9+7;
long long n,m,q;
char a[N];
long long dp[61][N],xb[61][N];
long long pre[N];
void ycl(){
for (int i=1,l=-1;i<=n;++i){
if (a[i]=='1') l=i;
pre[i]=l;
}
pre[0]=-1;
for (int i=1;i<=n;++i){
int x=(m+i)%n;
if (pre[x]==-1){
if (m+i<n) dp[0][i]=i+1;
else if (m+i<=2*n&&pre[n]<=i) dp[0][i]=1;
else dp[0][i]=pre[n]+((m+i)/n)*n-n-i;
}
else{
if (m+i<=n&&pre[x]<=i){
dp[0][i]=1;
}
else dp[0][i]=pre[x]+((m+i)/n)*n-i;
}
xb[0][i]=(dp[0][i]+i)%n;
if (xb[0][i]==0) xb[0][i]=n;
dp[0][i]%=mod;
}
for (int i=1;i<=60;++i){
for (long long j=1;j<=n;++j){
dp[i][j]=(dp[i-1][j]+dp[i-1][xb[i-1][j]])%mod;
xb[i][j]=xb[i-1][xb[i-1][j]];
}
}
}
long long s,k,sum,len,cnt;
void check(){
for (int i=1;i<=n;++i){
if (a[i]=='1') return ;
}
scanf("%d",&q);
for (int i=1;i<=q;++i){
scanf("%lld%lld",&s,&k);
printf("%lld\n",(s%mod+k%mod)%mod);
}
exit(0);
}
void work(){
for (int i=1;i<=q;++i){
scanf("%lld%lld",&s,&k);
sum=s;
s%=n;
if (s==0) s=n;
len=0;cnt=1;
while (cnt<=k){
++len;
cnt*=2;
}
--len;
cnt/=2;
while (k>0){
if (k>=cnt){
sum=(sum+dp[len][s])%mod;
s=sum%n;
if (s==0) s=n;
k-=cnt;
}
--len;
cnt/=2;
}
printf("%lld\n",sum);
}
}
int main(){
scanf("%lld%lld%lld",&n,&m,&q);
scanf("%s",a);
for (int i=n;i>=1;--i){
a[i]=a[i-1];
}
check();
ycl();
work();
return 0;
}