#include <bits/stdc++.h>
using namespace std;
template <class T>
void PV(T x) {
  for (__typeof__((x).begin()) i = (x).begin(); i != (x).end(); ++i)
    cout << *i << " ";
  cout << endl;
}
bool check(const vector<string> &T, const vector<string> &S, string &ret) {
  ret.clear();
  for (int i = (int)S.size() - 1, j = (int)T.size() - 1; i >= 0; i--, j--) {
    while (j >= 0 && S[i] != T[j]) {
      ret.push_back('0');
      j--;
    }
    if (j < 0) return false;
    ret.push_back('1');
  }
  while (ret.size() < T.size()) ret.push_back('0');
  reverse((ret).begin(), (ret).end());
  return true;
}
int main(int argc, char *argv[]) {
  string P, S;
  int K;
  getline(cin, P);
  getline(cin, S);
  cin >> K;
  if ((int)P.size() / K > (int)S.size()) {
    cout << 0 << endl;
    return 0;
  }
  vector<string> T(K);
  for (int n_ = (K), i = 0; i < n_; ++i) {
    for (int j = i; j < (int)P.size(); j += K) T[i].push_back(P[j]);
  }
  vector<string> LT, RT;
  for (auto &ti : T)
    if (ti.size() == T.front().size())
      LT.push_back(ti);
    else
      RT.push_back(ti);
  vector<string> ans;
  for (int n_ = (LT.size() + 1), x = 0; x < n_; ++x) {
    int y = -1;
    if (T.back().empty())
      y = 0;
    else if ((S.size() - x * T.front().size()) % T.back().size() == 0)
      y = (S.size() - x * T.front().size()) / T.back().size();
    if (0 <= y && y <= (int)RT.size()) {
      if (x * T.front().size() + y * T.back().size() == S.size()) {
        vector<string> LS(x), RS(y);
        for (int n_ = (S.size()), j = 0; j < n_; ++j) {
          if (j % (x + y) < x)
            LS[j % (x + y)].push_back(S[j]);
          else
            RS[j % (x + y) - x].push_back(S[j]);
        }
        string a1, a2;
        if (check(LT, LS, a1) && check(RT, RS, a2)) ans.push_back(a1 + a2);
      }
    }
  }
  sort((ans).begin(), (ans).end());
  if (ans.empty())
    cout << 0 << endl;
  else
    cout << ans.front() << endl;
  return 0;
}
