#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void Int(T &a) {
  bool minus = false;
  a = 0;
  char ch = getchar();
  while (true) {
    if (ch == '-' or (ch >= '0' && ch <= '9')) break;
    ch = getchar();
  }
  if (ch == '-')
    minus = true;
  else
    a = ch - '0';
  while (true) {
    ch = getchar();
    if (ch < '0' || ch > '9') break;
    a = a * 10 + (ch - '0');
  }
  if (minus) a *= -1;
}
template <typename T>
inline void Int(T &a, T &b) {
  Int(a), Int(b);
}
template <typename T>
inline void Int(T &a, T &b, T &c) {
  Int(a, b), Int(c);
}
template <typename T>
inline void Int(T &a, T &b, T &c, T &d) {
  Int(a, b), Int(c, d);
}
void err(istream_iterator<string> it) { cout << endl; }
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " = " << a << ' ';
  err(++it, args...);
}
const int N = (int)2e5 + 5;
const int maxN = (int)1e6 + 6;
const long long Mod = (long long)1e9 + 7;
const int inf = (int)2e9;
const long long Inf = (long long)1e18;
const int mod = (int)1e9 + 7;
inline int add(int a, int b, int mod) {
  a += b;
  return a >= mod ? a - mod : a;
}
inline int sub(int a, int b, int mod) {
  a -= b;
  return a < 0 ? a + mod : a;
}
inline int mul(int a, int b, int mod) { return (long long)a * b % mod; }
int dp[2][N];
int main() {
  int test = 1, tc = 0;
  while (test--) {
    string a, b;
    cin >> a >> b;
    int k;
    Int(k);
    a += a;
    int good = 0, bad = 0;
    int len = (int)b.size();
    for (int i = 0; i < len; ++i) {
      if (a.substr(i, len) == b)
        ++good;
      else
        ++bad;
    }
    dp[0][0] = a.substr(0, len) == b;
    dp[1][0] = !dp[0][0];
    for (int i = 1; i <= k; ++i) {
      dp[0][i] = add(mul(dp[0][i - 1], (good - 1), mod),
                     mul(dp[1][i - 1], good, mod), mod);
      dp[1][i] = add(mul(dp[1][i - 1], (bad - 1), mod),
                     mul(dp[0][i - 1], bad, mod), mod);
    }
    printf("%d\n", dp[0][k]);
  }
  return 0;
}
