#include <bits/stdc++.h>
using namespace std;
int main() {
  int n, m;
  long long k;
  scanf("%d%lld%d", &n, &k, &m);
  string s1[n + 1], s2[n + 1];
  s1[0] = s2[0] = "0";
  s1[1] = s2[1] = "1";
  for (int i = 2; i <= n; i++) {
    s1[i] = s1[i - 2];
    if (s1[i - 2].length() < m) {
      s1[i] += s1[i - 1];
    }
    if (s1[i].length() > m) {
      s1[i].resize(m);
    }
    if (s2[i - 1].length() < m) {
      s2[i] = s2[i - 2] + s2[i - 1];
    } else {
      s2[i] = s2[i - 1];
    }
    if (s2[i].length() > m) {
      s2[i] = s2[i].substr(s2[i].length() - m, m);
    }
  }
  string a;
  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 = s2[j - 2] + s1[j - 1];
      string t2 = a + '0';
      int kmi = s2[j - 2].length() - i + 1;
      if (kmi < 0) {
        kmi = 0;
      }
      int kma = t1.length() - i;
      if (kma > s2[j - 2].length() - 1) {
        kma = s2[j - 2].length() - 1;
      }
      for (int k = kmi; k <= kma; k++) {
        if (t1.substr(k, i) == t2) {
          f2++;
        }
      }
      f0 = f1;
      f1 = f2;
      if (f1 >= k) {
        f1 = k;
        break;
      }
    }
    if (f1 >= k) {
      a += '0';
    } else {
      a += '1';
      k -= f1;
    }
    if (s2[n].substr(s2[n].length() - i, i) == a) {
      k--;
    }
  }
  printf("%s\n", a.c_str());
  return 0;
}
