#include <bits/stdc++.h>
using namespace std;
const int maxint = -1u >> 1;
template <class T>
bool get_max(T& a, const T& b) {
  return b > a ? a = b, 1 : 0;
}
template <class T>
bool get_min(T& a, const T& b) {
  return b < a ? a = b, 1 : 0;
}
const int maxn = 1000000 + 5;
char p[maxn], q[maxn];
int n, k, clf, crt, lp, lq;
set<pair<vector<int>, vector<int> > > st;
set<string> ans;
char getVal(char* s, int row, int col, int cnt) { return s[row * cnt + col]; }
void outList(const vector<vector<char> >& vec) {
  for (int i = 0; i < vec.size(); i++) {
    for (int j = 0; j < vec[i].size(); j++) {
      cout << vec[i][j] << " ";
    }
    cout << endl;
  }
}
void solve(int olf, int ort) {
  vector<vector<char> > lx, ly;
  for (int i = 0; i < clf; i++) {
    lx.push_back(vector<char>());
  }
  for (int i = 0; i < crt; i++) {
    ly.push_back(vector<char>());
  }
  for (int i = 0; i < clf; i++) {
    for (int j = 0; j < n + 1; j++) {
      lx[i].push_back(getVal(p, j, i, k));
    }
  }
  for (int i = 0; i < crt; i++) {
    for (int j = 0; j < n; j++) {
      ly[i].push_back(getVal(p, j, i + clf, k));
    }
  }
  vector<vector<char> > qx, qy;
  for (int i = 0; i < olf; i++) {
    qx.push_back(vector<char>());
  }
  for (int i = 0; i < ort; i++) {
    qy.push_back(vector<char>());
  }
  for (int i = 0; i < olf; i++) {
    for (int j = 0; j < n + 1; j++) {
      qx[i].push_back(getVal(q, j, i, olf + ort));
    }
  }
  for (int i = 0; i < ort; i++) {
    for (int j = 0; j < n; j++) {
      qy[i].push_back(getVal(q, j, i + olf, olf + ort));
    }
  }
  vector<int> ax, ay;
  int mx = qx.size() - 1;
  for (int i = (int)lx.size() - 1; i >= 0; i--) {
    if (mx == -1) break;
    if (lx[i] == qx[mx]) {
      mx--;
      ax.push_back(i);
    }
  }
  if (mx != -1) return;
  int my = qy.size() - 1;
  for (int i = (int)ly.size() - 1; i >= 0; i--) {
    if (my == -1) break;
    if (ly[i] == qy[my]) {
      my--;
      ay.push_back(i);
    }
  }
  if (my != -1) return;
  sort(ax.begin(), ax.end());
  sort(ay.begin(), ay.end());
  st.insert(make_pair(ax, ay));
}
char s_ans[maxn];
void outResult(pair<vector<int>, vector<int> > res) {
  for (int i = 0; i < k; i++) {
    s_ans[i] = '0';
  }
  for (int i = 0; i < res.first.size(); i++) {
    s_ans[res.first[i]] = '1';
  }
  for (int i = 0; i < res.second.size(); i++) {
    s_ans[res.second[i] + clf] = '1';
  }
  s_ans[k + 1] = '\0';
  ans.insert(string(s_ans));
}
int main() {
  gets(p);
  gets(q);
  scanf("%d", &k);
  lp = strlen(p), lq = strlen(q);
  n = lp / k;
  clf = lp % k;
  crt = k - clf;
  for (int x = 0; x <= clf; x++) {
    for (int y = 0; y <= crt; y++) {
      if (x * (n + 1) + y * n == lq) {
        solve(x, y);
      }
    }
  }
  if (st.empty()) {
    printf("0\n");
  } else {
    for (set<pair<vector<int>, vector<int> > >::iterator it = st.begin();
         it != st.end(); it++) {
      outResult(*it);
    }
    cout << *ans.begin() << endl;
  }
  return 0;
}
