#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

const int LimMax = 320, NMax = 1e5+5;

int n, q, lim, i, x, y, cost, nr;
int start[NMax], stop[NMax], sum[LimMax][NMax], Prev[NMax], Next[NMax];
vector<int> v; char A[NMax];

void precompute()
{
    int i, j;
    for(i=1; i<=n; ++i)
        if(A[i]=='0')
        {
            start[++nr] = i;
            while(A[i]=='0') ++i;
            stop[nr] = i-1;

            if(stop[nr] - start[nr] + 1 > lim) v.push_back(nr);
        }

    for(i=1; i<=lim; ++i)
        for(j=1; j<=nr; ++j)
            sum[i][j] = sum[i][j-1] + (stop[j] - start[j] + 1) / i;

    Next[n+1] = nr+1;
    for(i=n; i; --i)
        if(start[Next[i+1]-1] == i)
            Next[i] = Next[i+1] - 1;
        else Next[i] = Next[i+1];

    Prev[0] = 0;
    for(i=1; i<=n; ++i)
        if(stop[Prev[i-1]+1] == i)
            Prev[i] = Prev[i-1] + 1;
        else Prev[i] = Prev[i-1];
}

int solve1(int x, int y, int cost)
{
    int ans = sum[cost][Prev[y]] - sum[cost][Next[x]-1];
    if(x <= stop[Next[x]-1]) ans += (stop[Next[x]-1] - x + 1) / cost;
    if(y >= start[Prev[y]+1]) ans += (y - start[Prev[y]+1] + 1) / cost;

    return ans;
}

int solve2(int x, int y, int cost)
{
    int x0, y0, ans=0;
    for(auto i : v)
    {
        x0 = max(x, start[i]);
        y0 = min(y, stop[i]);
        if(x0<=y0) ans += (y0 - x0 + 1) / cost;
    }

    return ans;
}

int main()
{
  //  freopen("input", "r", stdin);
   // freopen("output", "w", stdout);

    scanf("%d\n", &n);
    scanf("%s\n", A+1);
    scanf("%d\n", &q);
    lim = sqrt(n);
    precompute();

    while(q--)
    {
        scanf( "%d%d%d", &x, &y, &cost );
        if(y-x<=1)
        {
            printf("0\n");
            continue;
        }

        ++x; --y;
        printf( "%d\n", cost<=lim ? solve1(x, y, cost) : solve2(x, y, cost) );
    }

    return 0;
}