#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void umax(T &a, T b) {
  if (a < b) a = b;
}
template <class T>
inline void umin(T &a, T b) {
  if (a > b) a = b;
}
template <class T>
inline T abs(T a) {
  return a > 0 ? a : -a;
}
template <class T>
inline T gcd(T a, T b) {
  return __gcd(a, b);
}
template <class T>
inline T lcm(T a, T b) {
  return a / gcd(a, b) * b;
}
const int inf = 1e9 + 143;
const long long longinf = 1e18 + 143;
inline int read() {
  int x;
  scanf(" %d", &x);
  return x;
}
const int N = 2e5 + 100;
int na, nb;
char a[N], b[N];
const int K = 32;
unsigned A[K + 5][N / K + 5], B[K + 5][N / K + 5];
const int MSK = (1 << 16) - 1;
int cnt[1 << 17];
int main() {
  for (int i = 1; i < (1 << 16); i++) cnt[i] = cnt[i - (i & -i)] + 1;
  scanf(" %s %s", a, b);
  na = strlen(a);
  nb = strlen(b);
  for (int st = 0; st < K; st++) {
    for (int i = st; i < na; i += K) {
      int w = i / K;
      for (int j = 0; j < K && i + j < na; j++) {
        if (a[i + j] == '1') A[st][w] |= 1u << j;
      }
    }
  }
  for (int st = 0; st < K; st++) {
    for (int i = st; i < nb; i += K) {
      int w = (i - st) / K;
      for (int j = 0; j < K && i + j < nb; j++) {
        if (b[i + j] == '1') B[st][w] |= 1u << j;
      }
    }
  }
  int q = read();
  for (int i = 0; i < q; i++) {
    int p1 = read(), p2 = read(), len = read();
    int end1 = p1 + len;
    int st1 = p1 & 31;
    int st2 = p2 & 31;
    int w1 = (p1 - st1) >> 5;
    int w2 = (p2 - st2) >> 5;
    int s = 0;
    while (p1 + K < end1) {
      unsigned x = A[st1][w1] ^ B[st2][w2];
      s += cnt[x & MSK] + cnt[x >> 16];
      p1 += K;
      p2 += K;
      ++w1;
      ++w2;
    }
    while (p1 < end1) {
      s += (a[p1] != b[p2]);
      ++p1;
      ++p2;
    }
    printf("%d\n", s);
  }
  return 0;
}
