#include <bits/stdc++.h>
using namespace std;
const int p = 1000000007;
const int N = 600000;
int d1, d2, n, l1, l2, cnt1, cnt2, inv[600010], jc[600010], ans;
char A[300010], B[300010];
int poww(int a, int k) {
  int ans = 1;
  for (; k; k >>= 1) {
    if (k & 1) ans = 1ll * ans * a % p;
    a = 1ll * a * a % p;
  }
  return ans;
}
void pre() {
  jc[0] = 1;
  for (int i = 1; i <= N; ++i) jc[i] = 1ll * jc[i - 1] * i % p;
  inv[N] = poww(jc[N], p - 2);
  for (int i = N; i >= 1; --i) inv[i - 1] = 1ll * inv[i] * i % p;
}
int v[300010], prime[100010], t, u[300010], Pow[300010];
int C(int n, int m) { return 1ll * jc[n] * inv[m] % p * inv[n - m] % p; }
int gcd(int a, int b) {
  if (!b) return a;
  return gcd(b, a % b);
}
int main() {
  scanf("%s", A + 1);
  scanf("%s", B + 1);
  cin >> n;
  pre();
  l1 = strlen(A + 1);
  l2 = strlen(B + 1);
  bool flag = 1;
  if (l1 != l2) flag = 0;
  int sum = 1;
  for (int i = 1; i <= l1 && flag; ++i) {
    int cnt = 0;
    if (A[i] == '?') cnt++;
    if (B[i] == '?') cnt++;
    if (cnt) {
      if (cnt == 2) sum = sum * 2 % p;
    } else if (A[i] != B[i])
      flag = 0;
  }
  if (flag == 0) sum = 0;
  for (int i = 1; i <= l1; ++i) {
    if (A[i] == 'A')
      d1++;
    else if (A[i] == 'B')
      d2++;
    else
      cnt1++;
  }
  for (int i = 1; i <= l2; ++i) {
    if (B[i] == 'A')
      d1--;
    else if (B[i] == 'B')
      d2--;
    else
      cnt2++;
  }
  u[1] = 1;
  for (int i = 2; i <= n; ++i) {
    if (v[i] == 0) {
      v[i] = i;
      prime[++t] = i;
      u[i] = -1;
    }
    for (int j = 1; j <= t && prime[j] <= n / i; ++j) {
      if (prime[j] > v[i]) break;
      v[i * prime[j]] = prime[j];
      if (v[i] == prime[j])
        u[i * prime[j]] = 0;
      else
        u[i * prime[j]] = -u[i];
    }
  }
  Pow[0] = 1;
  int ll = 0;
  for (int i = 1; i <= n; ++i) Pow[i] = Pow[i - 1] * 2 % p, (ll += Pow[i]) %= p;
  Pow[n + 1] = Pow[n] * 2 % p;
  if (sum) {
    (ans += 1ll * ll * ll % p * sum % p) %= p;
  }
  for (int mm = 0; mm <= cnt1 + cnt2; ++mm) {
    int D1 = d1 + mm - cnt2;
    int D2 = d2 + cnt1 - mm;
    int ff = C(cnt1 + cnt2, mm);
    if (D1 == D2 && D1 == 0) {
      ff = (ff - sum + p) % p;
      int pp = 1;
      int o = 0;
      for (int i = 1; i <= n; ++i) {
        pp = pp * 2 % p;
        int nn = 0;
        for (int j = 1; j <= n / i; ++j) {
          int g = (1ll * (n / (i * j)) * (n / (i * j)) % p * u[j] + p) % p;
          (nn += g) %= p;
        }
        (o += 1ll * nn * pp % p) %= p;
      }
      (ans += 1ll * ff * o % p) %= p;
    } else {
      if (1ll * D1 * D2 >= 0) continue;
      D1 = abs(D1);
      D2 = abs(D2);
      int dd = gcd(D1, D2);
      D1 /= dd;
      D2 /= dd;
      int g = n / max(D1, D2);
      (ans += 1ll * (Pow[g + 1] - 2 + p) % p * ff % p) %= p;
    }
  }
  cout << ans;
  return 0;
}
