#include <bits/stdc++.h>
using namespace std;
char p[1100000], s[210];
int x[1100000], y[1100000];
int len, m, n, k, kk;
int d[2100][210], nex[2100][210];
bool ok() {
  if (kk * n < m) return false;
  if (kk * (n - 2) > m) return false;
  return true;
}
int dp(int a, int b) {
  if (d[a][b] != -1) return d[a][b];
  if (a < b) return d[a][b] = 0;
  if (a == 0) return d[a][b] = 1;
  if (dp(a - 1, b)) {
    nex[a][b] = b;
    return d[a][b] = 1;
  }
  int aa = k - a, bb = kk - b;
  for (int i = aa, j = bb; i < len; i += k, j += kk)
    if (x[i] != y[j]) return d[a][b] = 0;
  if (!dp(a - 1, b - 1)) return d[a][b] = 0;
  nex[a][b] = b - 1;
  return d[a][b] = 1;
}
int main() {
  memset(x, -1, sizeof(x));
  memset(y, -1, sizeof(y));
  gets(p);
  len = strlen(p);
  for (int i = 0; i < len; ++i) x[i] = ((int)p[i]);
  gets(s);
  m = strlen(s);
  for (int i = 0; i < m; ++i) y[i] = ((int)s[i]);
  scanf("%d", &k);
  n = (len + k - 1) / k;
  len = n * k;
  string res = "";
  for (int i = 0; i <= k; ++i) res += '1';
  for (kk = 1; kk <= min(k, m); ++kk) {
    if (!ok()) continue;
    memset(d, -1, sizeof(d));
    if (!dp(k, kk)) continue;
    string tmp = "";
    for (int i = k, j = kk; i > 0; j = nex[i][j], --i) {
      if (nex[i][j] == j)
        tmp += '0';
      else
        tmp += '1';
    }
    res = min(res, tmp);
  }
  if (res.length() == k + 1)
    puts("0");
  else
    cout << res << endl;
  return 0;
}
