#include <bits/stdc++.h>
char ch;
inline void read(int &x) {
  x = 0;
  ch = getchar();
  while (ch <= 32) ch = getchar();
  while (ch > 32) {
    x = x * 10 + ch - 48;
    ch = getchar();
  };
};
int cnt_table[1 << 16];
inline void pre() {
  int i;
  for (i = 1; i < (1 << 16); i++) {
    cnt_table[i] = cnt_table[i >> 1] + (i & 1);
  };
};
char a[200005], b[200005];
int n, m, q;
inline void main1() {
  read(q);
  while (q--) {
    int p1, p2, len;
    read(p1);
    read(p2);
    read(len);
    int ans = 0;
    char *A = a + p1, *B = b + p2;
    while (len--) {
      ans += (*A++) ^ (*B++);
    };
    printf("%d\n", ans);
  };
};
unsigned int aa[32][200005 / 32 + 3], bb[32][200005 / 32 + 3];
inline void build(char *a, unsigned int *A, int n) {
  int i;
  for (i = 0; i < n; i++) {
    A[i >> 5] |= a[i] << (i & 31);
  };
};
inline void init() {
  int i;
  for (i = 0; i < 32; i++) {
    build(a + i, aa[i], n - i);
  };
  for (i = 0; i < 32; i++) {
    build(b + i, bb[i], m - i);
  };
};
inline int getcnt(unsigned int x) {
  return cnt_table[x >> 16] + cnt_table[x & 65535];
};
inline int calc(unsigned int *A, unsigned int *B, int len) {
  int ret = 0;
  int l = len >> 5;
  while (l--) {
    ret += getcnt((*A++) ^ (*B++));
  };
  return ret + getcnt(((1u << (len & 31)) - 1u) & (*A ^ *B));
};
int main() {
  scanf("%s%s", a, b);
  n = strlen(a);
  m = strlen(b);
  int i;
  for (i = 0; i < n; i++) a[i] -= 48;
  for (i = 0; i < m; i++) b[i] -= 48;
  pre();
  if (n <= 35 || m <= 35) {
    main1();
    return 0;
  };
  init();
  read(q);
  while (q--) {
    int p1, p2, len;
    read(p1);
    read(p2);
    read(len);
    unsigned int *A, *B;
    A = aa[p1 & 31] + (p1 >> 5);
    B = bb[p2 & 31] + (p2 >> 5);
    printf("%d\n", calc(A, B, len));
  };
}
