#include <bits/stdc++.h>
using namespace std;
int const lim = 200 + 3;
int const MLOG = 20;
int mod = 1e9 + 7;
bool dp[2002][202];
vector<int> ans[lim + 3];
int arr[lim + 2];
string s, ss;
int k;
bool check(int i, int j, int len) {
  while (true) {
    i += len;
    j += k;
    if (i >= ss.size() && j >= s.size()) return true;
    if (j >= s.size()) return false;
    if (i >= ss.size()) return false;
    if (ss[i] != s[j]) return false;
  }
}
bool cmp(int a, int b) {
  for (int i = 0; i < min(ans[a].size(), ans[b].size()); i++)
    if (ans[a][i] != ans[b][i]) return ans[a][i] > ans[b][i];
  return ans[a].size() < ans[b].size();
}
int main() {
  getline(cin, s);
  getline(cin, ss);
  cin >> k;
  int sz1 = ss.size();
  int sz = s.size();
  int mn = min(sz1, k);
  for (int len = 1; len <= mn; len++) {
    int last = min(k, sz);
    bool shit = true;
    for (int i = len - 1; i >= 0; i--) {
      if (last <= 0) {
        shit = false;
        break;
      }
      bool nk7 = false;
      for (int j = last - 1; j >= 0; j--) {
        if (s[j] == ss[i]) {
          if (check(i, j, len)) {
            last = j;
            nk7 = true;
            ans[len].push_back(j);
            break;
          }
        }
      }
      if (!nk7) {
        shit = false;
        break;
      }
    }
    arr[len] = len;
    reverse(ans[len].begin(), ans[len].end());
  }
  sort(arr + 1, arr + mn + 1, cmp);
  for (int i = 1; i <= mn; i++) {
    int ind = arr[i];
    if (ans[ind].size() != ind) continue;
    string out;
    for (int j = 0; j < k; j++) out.push_back('0');
    for (int j = 0; j < ans[ind].size(); j++) out[ans[ind][j]] = '1';
    cout << out << endl;
    return 0;
  }
  puts("0");
}
