#include<bits/stdc++.h>
#define int long long
#define PII pair<int,int>
#define fi first
#define se second
#define sz(x) (int)(x.size())
#define all(x) x.begin(),x.end()
#define See_Memory cerr<<abs(&M1-&M2)/1024.0/1024.0<<"MB\n"
#define See_Time cerr<<(clock()-T)*1.0/CLOCKS_PER_SEC<<"s\n"
using namespace std;
const int N=2e5+10,mod=1e9+7;
bool M1;
mt19937 rng(time(0));
int n,m,q,sum[N];
vector<PII> g[N];
int f[N][61],h[N][61];
string s;
void Solve()
{
cin>>n>>m>>q>>s; s=' '+s;
for(int i=1;i<=n;++i) sum[i]=sum[i-1]+(s[i]-'0');
for(int i=1;i<=n;++i)
{
int k=(m%n),l=1,r=n,ans=0;
if(i+k-1>=n)
{
r=k-(n-i);
while(l<=r)
{
int mid=(l+r)>>1;
if(sum[k-(n-i)]-sum[mid-1]) ans=mid,l=mid+1;
else r=mid-1;
}
}
if(!ans)
{
l=i+1,r=min(i+k,n);
while(l<=r)
{
int mid=(l+r)>>1;
if(sum[min(i+k,n)]-sum[mid-1]) ans=mid,l=mid+1;
else r=mid-1;
}
}
if(!ans) ans=(ans==n?1:i+1);
f[i][0]=ans,h[i][0]=(n*(m/n)+(ans<i?ans+(n-i):(ans-i)))%mod;
}
for(int j=1;j<=60;++j)
{
for(int i=1;i<=n;++i)
{
f[i][j]=f[f[i][j-1]][j-1],h[i][j]=(h[i][j-1]+h[f[i][j-1]][j-1])%mod;
}
}
while(q--)
{
int s,k,pos; cin>>s>>k;
pos=s%n; if(!pos) pos=n;
for(int i=60;i>=0;--i)
{
if(k>=(1ll<<i))
{
s=(s+h[pos][i])%mod;
pos=f[pos][i];
k-=(1ll<<i);
}
}
cout<<s<<'\n';
}
}
bool M2;
signed main()
{
ios::sync_with_stdio(false); cin.tie(nullptr);
int T=clock();
int t=1;
while(t--) Solve();
See_Memory; See_Time;
return 0;
}