#include <bits/stdc++.h>
using namespace std;
vector<int> sol;
int nb, cpb, k;
string p, s;
void resetKey(char *q) { memset(q, '0', k); }
bool validateChar(int p_pos, int s_pos) {
  bool ret = true;
  while (s_pos < s.size() && p_pos < p.size()) {
    if (s[s_pos] != p[p_pos]) {
      ret = false;
      break;
    }
    s_pos += cpb;
    p_pos += k;
  }
  if (s_pos < s.size() || p_pos < p.size()) ret = false;
  return ret;
}
int main() {
  char temp;
  while ((temp = getchar()) != '\n') p += temp;
  while ((temp = getchar()) != '\n') s += temp;
  cin >> k;
  char *q;
  q = new char[k + 1];
  q[k] = '\0';
  resetKey(q);
  if (k == 0) {
    cout << '0';
    return 0;
  }
  int ans = 0;
  nb = p.size() / k;
  if (nb == 0) {
    nb = 1;
  }
  cpb = s.size() / nb;
  int lastBlockChars = s.size() - (cpb * nb);
  int lbs = p.size() % k;
  int i = (cpb - lastBlockChars) / (nb + 1);
  int orig_cpb = cpb;
  int orig_lbc = lastBlockChars;
  bool isFound = false;
  while (i >= 0) {
    vector<int> temp_sol(k, 0);
    resetKey(q);
    cpb = orig_cpb - i;
    lastBlockChars = orig_lbc + i * nb;
    int p_pos, last_p_pos = k - 1;
    int s_pos = cpb - 1;
    char currChar;
    if ((lastBlockChars > lbs) || cpb <= 0 || cpb < lastBlockChars) {
      i--;
      continue;
      ;
    }
    while (s_pos >= 0 && last_p_pos >= 0) {
      currChar = s[s_pos];
      p_pos = p.find_last_of(currChar, last_p_pos);
      if (p_pos == string::npos) break;
      if (validateChar(p_pos, s_pos)) {
        s_pos--;
        temp_sol[p_pos] = 1;
        q[p_pos] = '1';
      }
      last_p_pos = p_pos - 1;
    }
    if (s_pos < 0) {
      if (sol.empty())
        sol = temp_sol;
      else if (temp_sol < sol) {
        sol = temp_sol;
      }
    }
    i--;
  }
  if (sol.empty() == false) {
    int i = 0;
    while (i < sol.size()) cout << sol[i++];
  } else {
    cout << 0;
  }
  return 0;
}
