#include <bits/stdc++.h>
using namespace std;
const int debug = 0;
const int N = 400100;
char str1[N];
char str2[N];
int p1, p2, len;
unsigned A[32][N];
unsigned B[32][N];
int h[1 << 16];
unsigned countbits(unsigned x) {
  unsigned mask[] = {0x55555555, 0x33333333, 0x0F0F0F0F, 0x00FF00FF,
                     0x0000FFFF};
  for (unsigned i = 0, j = 1; i < 5; i++, j <<= 1) {
    x = (x & mask[i]) + ((x >> j) & mask[i]);
  }
  return x;
}
inline int H(const unsigned& x) { return h[x >> 16] + h[x & ((1 << 16) - 1)]; }
void printIntBit(unsigned* p) {
  printf("int binary:");
  for (int i = 0; i < 32; i++) {
    printf("%d", (*p >> i) & 1);
    if (i % 8 == 7) {
      printf(" ");
    }
  }
  printf("\n");
}
void bulid(const char* const q, unsigned A[32][N]) {
  int l = strlen(q);
  for (int i = 0; i < 32; i++) {
    for (int j = 0; i + j < l; j++) {
      if (q[i + j] == '1') {
        A[i][j >> 5] |= (1U << (j & 31));
      }
    }
  }
}
int solver() {
  if (len == 0) {
    return 0;
  }
  int ans = 0;
  int end = p1 + len;
  unsigned* a = A[p1 & 31] + (p1 >> 5);
  unsigned* b = B[p2 & 31] + (p2 >> 5);
  while (len >= 32) {
    ans += H(*a++ ^ *b++);
    p1 += 32;
    p2 += 32;
    len -= 32;
  }
  ans += H((*a ^ *b) & ((1U << len) - 1));
  return ans;
}
int force() {
  int ans = 0;
  for (int i = 0; i < len; i++) {
    if (str1[p1 + i] ^ str2[p2 + i]) {
      ans++;
    }
  }
  return ans;
}
int main() {
  for (int i = 1; i < 1 << 16; ++i) h[i] = h[i >> 1] + (i & 1);
  int q;
  memset(A, 0, sizeof(A));
  memset(B, 0, sizeof(B));
  scanf("%s", str1);
  scanf("%s", str2);
  bulid(str1, A);
  bulid(str2, B);
  scanf("%d", &q);
  while (q--) {
    scanf("%d%d%d", &p1, &p2, &len);
    printf("%d\n", solver());
  }
  return 0;
}
