#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e18;
vector<int> prefixFunction(const string& s) {
  int n = s.size();
  int k = 0;
  vector<int> v(n + 1);
  v[1] = 0;
  for (int i = 2; i <= n; i++) {
    while (k > 0 && s[k] != s[i - 1]) k = v[k];
    if (s[k] == s[i - 1]) k++;
    v[i] = k;
  }
  return v;
}
int kmpMatcher(const string& text, const string& pattern) {
  vector<int> pi = prefixFunction(pattern);
  int matchCount = 0;
  int k = 0;
  for (int i = 0; i < text.size(); i++) {
    while (k > 0 && text[i] != pattern[k]) k = pi[k];
    if (text[i] == pattern[k]) k++;
    if (k == pattern.size()) {
      matchCount++;
      k = pi[k];
    }
  }
  return matchCount;
}
string fib[2];
string prfx[201];
string sffx[201];
long long target;
string s;
long long dp[201];
long long solve(int n) {
  if (n < 2) {
    if (s == fib[n]) return 1;
    return 0;
  }
  if (dp[n] != -1) return dp[n];
  long long& ans = dp[n];
  ans = 0;
  ans += solve(n - 2);
  if (ans > target) return ans;
  ans += solve(n - 1);
  if (ans > target) return ans;
  int len = s.size();
  if (len > 1) {
    string txt = "";
    int k = min(len - 1, (int)sffx[n - 2].size());
    txt += sffx[n - 2].substr(sffx[n - 2].size() - k, k);
    k = min(len - 1, (int)prfx[n - 1].size());
    txt += prfx[n - 1].substr(0, k);
    ans += kmpMatcher(txt, s);
  }
  return ans;
}
int n, m;
long long k;
long long query() {
  fill(dp, dp + n + 1, -1);
  target = k;
  long long g = solve(n);
  return g;
}
long long suffixFind() {
  if (s.size() > sffx[n].size()) return 0;
  int ln = s.size();
  long long flg = sffx[n].substr(sffx[n].size() - ln, ln) == s;
  return flg;
}
void trie(int len) {
  if (len > m || k == 0) {
    cout << s << endl;
    exit(0);
  }
  s += '0';
  long long g = query();
  if (g < k) {
    k -= g;
    s[len - 1]++;
  }
  k -= suffixFind();
  trie(len + 1);
}
int main() {
  cin >> n >> k >> m;
  fib[0] = "0";
  fib[1] = "1";
  prfx[0] = "0";
  sffx[0] = "0";
  prfx[1] = "1";
  sffx[1] = "1";
  for (int i = 2; i <= n; i++) {
    prfx[i] = prfx[i - 2] + prfx[i - 1];
    sffx[i] = sffx[i - 2] + sffx[i - 1];
    if (prfx[i].size() > 200) {
      prfx[i] = prfx[i].substr(0, 200);
    }
    if (sffx[i].size() > 200) {
      sffx[i] = sffx[i].substr(sffx[i].size() - 200, 200);
    }
  }
  trie(1);
  return 0;
}
