#include <bits/stdc++.h>
using namespace std;
const int MAX_BUF_SIZE = 16384;
char BUFOR[MAX_BUF_SIZE];
int BUF_SIZE, BUF_POS;
char ZZZ;
int _MINUS;
const int MXN = 200110;
const int C = 262144;
const int INF = 1000000001;
int n, m;
char a[MXN], b[MXN];
int lenA, lenB;
unsigned int A[MXN], B[MXN];
unsigned int AA[32][MXN / 32], BB[32][MXN / 32];
int tab[(1 << 16) + 10];
inline int cnt(unsigned int q) {
  return tab[q >> 16] + tab[q & ((1 << 16) - 1)];
}
void test() {
  for (int i = (0); i <= ((1 << 16)); i++) {
    tab[i] = __builtin_popcount(i);
  }
  scanf("%s", a + 1);
  scanf("%s", b + 1);
  lenA = strlen(a + 1);
  lenB = strlen(b + 1);
  for (int i = (1); i <= (lenA); i++) {
    A[i] = (unsigned int)(a[i] - '0');
    for (int o = (1); o <= (31); o++) A[i] = A[i] | ((a[i + o] - '0') << o);
    AA[i % 32][i / 32] = A[i];
  }
  for (int i = (1); i <= (lenB); i++) {
    B[i] = (unsigned int)(b[i] - '0');
    for (int o = (1); o <= (31); o++) B[i] = B[i] | ((b[i + o] - '0') << o);
    BB[i % 32][i / 32] = B[i];
  }
  int q;
  scanf("%d", &q);
  while (q--) {
    int p1, p2, len;
    scanf("%d %d %d", &p1, &p2, &len);
    p1++;
    p2++;
    int k1 = p1 + len - 1;
    int k2 = p2 + len - 1;
    int pp1 = p1 / 32;
    int pp2 = p2 / 32;
    int res = 0;
    int o1 = p1 % 32;
    int o2 = p2 % 32;
    while (p1 <= k1) {
      if (k1 - p1 >= 32)
        res += cnt(AA[o1][pp1] ^ BB[o2][pp2]);
      else {
        for (int i = (0); i <= (k1 - p1); i++) res += (a[p1 + i] != b[p2 + i]);
      }
      p1 += 32;
      p2 += 32;
      pp1++;
      pp2++;
    }
    printf("%d\n", res);
  }
}
int main() {
  int te = 1;
  while (te--) test();
  return 0;
}
