#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9;
const int MOD = 1e9 + 7;
const long long BASE[2] = {97, 67};
const int N = 2e3 + 10, M = 2e2 + 10;
string s1, s2, ans;
int n, m, k, t[N][M];
pair<int, int> g[N][2];
void prepare() {
  getline(cin, s1);
  getline(cin, s2);
  cin >> k;
  n = s1.length(), m = s2.length();
}
pair<int, int> calhash(int cur, int len, int type) {
  int ans = 0, c = 0;
  for (int j = cur; j < m; j += len)
    ans = (BASE[type] * ans + s2[j] - 32) % MOD, c++;
  return pair<int, int>(ans, c);
}
bool operator==(pair<int, int> a, pair<int, int> b) {
  return (a.first == b.first && a.second == b.second);
}
string solve() {
  int k1 = min(k, n);
  for (auto i = 1; i <= k1; i++) ans.push_back('2');
  for (auto i = 0; i < k1; i++)
    for (int j = i; j < n; j += k1)
      for (auto j1 = 0; j1 <= 1; j1++) {
        g[i][j1].first = (BASE[j1] * g[i][j1].first + s1[j] - 32) % MOD;
        g[i][j1].second++;
      }
  for (auto use = 1; use <= m; use++) {
    memset(t[k1], 0, sizeof(t[k1]));
    t[k1][use] = -1;
    for (auto i = k1; i >= 1; i--) {
      for (auto j = 0; j <= use; j++) t[i - 1][j] = (t[i][j] ? 1 : 0);
      for (auto j = 0; j < use; j++)
        if (!t[i - 1][j] && t[i][j + 1]) {
          pair<int, int> x[2] = {calhash(j, use, 0), calhash(j, use, 1)};
          if (x[0] == g[i - 1][0] && x[1] == g[i - 1][1]) t[i - 1][j] = 2;
        }
    }
    if (t[0][0]) {
      int cur = 0;
      bool sma = 0;
      for (auto i = 0; i < k1; i++) {
        int x = t[i][cur] - 1;
        if (!sma && x > ans[i] - '0') break;
        sma |= (x < ans[i] - '0');
        ans[i] = '0' + x;
        cur += x;
      }
    }
  }
  if (ans[0] == '2') return "0";
  for (auto i = k1 + 1; i <= k; i++) ans.push_back('0');
  return ans;
}
int main() {
  prepare();
  cout << solve();
}
