#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int grand(int x) { return uniform_int_distribution<int>(0, x - 1)(rng); }
const int maxn = 203;
const long long inf = 1e18 + 7;
const long long md = 1e9 + 7;
long long gcd(long long x, long long y) {
  if (x < y) return gcd(y, x);
  if (y == 0) return x;
  return gcd(y, x % y);
}
string small[maxn];
long long fc[maxn];
long long fsz[maxn];
bool pref[maxn][maxn];
bool suff[maxn][maxn];
long long fibc(int n, string s, bool suf) {
  fsz[0] = fsz[1] = 1;
  if (s == "0") {
    fc[0] = 1;
    fc[1] = 0;
  } else if (s == "1") {
    fc[0] = 0;
    fc[1] = 1;
  } else {
    fc[0] = fc[1] = 0;
  }
  for (int j = 0; j < maxn; j++)
    pref[0][j] = suff[0][j] = pref[1][j] = suff[1][j] = false;
  pref[0][0] = suff[0][0] = pref[1][0] = suff[1][0] = true;
  if (s[0] == '0') {
    suff[0][1] = true;
  } else {
    suff[1][1] = true;
  }
  int m = s.size();
  if (s[m - 1] == '0') {
    pref[0][1] = true;
  } else {
    pref[1][1] = true;
  }
  for (int j = 2; j <= n; j++) {
    fc[j] = ((fc[j - 2]) >= inf - (fc[j - 1])) ? inf : (fc[j - 2] + fc[j - 1]);
    fsz[j] =
        ((fsz[j - 2]) >= inf - (fsz[j - 1])) ? inf : (fsz[j - 2] + fsz[j - 1]);
    pref[j][0] = suff[j][0] = true;
    for (int q = 1; q < m; q++) {
      if (suff[j - 2][q] && pref[j - 1][m - q]) {
        fc[j] = ((fc[j]) >= inf - (1)) ? inf : (fc[j] + 1);
        break;
      }
    }
    for (int q = 1; q <= m; q++) {
      pref[j][q] = pref[j - 2][q];
      if (q > fsz[j - 2]) {
        pref[j][q] =
            pref[j][q] || (pref[j - 1][q - fsz[j - 2]] &&
                           s.substr(m - q, fsz[j - 2]) == small[j - 2]);
      }
      suff[j][q] = suff[j - 1][q];
      if (q > fsz[j - 1]) {
        suff[j][q] = suff[j][q] ||
                     (suff[j - 2][q - fsz[j - 1]] &&
                      s.substr(q - fsz[j - 1], fsz[j - 1]) == small[j - 1]);
      }
    }
  }
  if (s == "" && suf) return 0;
  if (s == "") return fsz[n];
  if (suf) return suff[n][m];
  return fc[n];
}
int main() {
  {
    ios ::sync_with_stdio(false);
    cin.tie(0);
  };
  small[0] = "0";
  small[1] = "1";
  for (int j = 2; j < maxn; j++) {
    small[j] = small[j - 2];
    if (small[j - 2].size() + small[j - 1].size() < maxn) {
      small[j] += small[j - 1];
    }
  }
  int n, m;
  long long k;
  cin >> n >> k >> m;
  string s = "";
  while (s.size() < m) {
    long long q = fibc(n, s, true);
    if (k <= q) break;
    k -= q;
    string t = s + "0";
    long long p = fibc(n, t, false);
    if (k <= p) {
      s = t;
      continue;
    }
    k -= p;
    s += "1";
  }
  cout << s << "\n";
}
