#include <bits/stdc++.h>
const int MN = 200 + 5;
using namespace std;
template <typename T>
inline T& IN(T& in) {
  in = 0;
  char c = getchar();
  int f = 1;
  while (!isdigit(c)) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (isdigit(c)) in = in * 10 + c - '0', c = getchar();
  return in *= f;
}
int n, m;
long long k;
string suf[MN], pre[MN], ans;
void input() {
  IN(n), IN(k), IN(m);
  pre[0] = suf[0] = "0", pre[1] = suf[1] = "1";
  for (int i = 2; i <= n; ++i) {
    pre[i] = pre[i - 2];
    suf[i] = suf[i - 1];
    if (pre[i].length() < m) pre[i] += pre[i - 1];
    if (pre[i].length() > m) pre[i].resize(m);
    if (suf[i].length() < m) suf[i] = suf[i - 2] + suf[i - 1];
    if (suf[i].length() > m) suf[i] = suf[i].substr(suf[i].length() - m, m);
  }
  for (int i = 1; i <= m && k > 0; ++i) {
    long long f0 = i == 1, f1 = 0, f2 = 0;
    for (int j = 2; j <= n; ++j) {
      f2 = f1 + f0;
      string t1 = suf[j - 2] + pre[j - 1], t2 = ans + '0';
      int l = max(0, (int)suf[j - 2].length() - i + 1),
          r = min(t1.length() - i, suf[j - 2].length() - 1);
      for (int k = l; k <= r; ++k)
        if (t1.substr(k, i) == t2) f2++;
      f0 = f1, f1 = f2;
      if (f1 >= k) break;
    }
    if (f1 >= k)
      ans += '0';
    else
      ans += '1', k -= f1;
    if (suf[n].substr(suf[n].length() - i, i) == ans) k--;
  }
  printf("%s\n", ans.c_str());
}
int main() {
  input();
  return 0;
}
