#include <bits/stdc++.h>
using namespace std;
long long n;
long long fib[93 * 20];
string s[20 * 20];
void dfs(long long pos, long long k, long long m, bool fine) {
  if (m <= s[pos].size()) {
    for (int i = 0; i < m; i++) cout << s[pos][i];
    cout << endl;
    return;
  } else
    for (int i = 0; i < s[pos].size(); i++) cout << s[pos][i];
  m -= s[pos].size();
  int first = pos + 1 + (pos + 1) % 2;
  if (pos == 0) {
    if (k <= fib[n - first + 1]) return dfs(first, k, m, true);
    return dfs(pos + pos % 2 + 1, k - fib[n - first + 1], m, true);
  }
  k--;
  if (k == 0) {
    cout << endl;
    return;
  }
  if (fine) {
    if (n % 2) {
      if (k <= fib[n - first + 1]) return dfs(first, k, m, true);
      return dfs(pos + pos % 2 + 1, k - fib[n - first + 1], m, false);
    } else {
      if (k <= fib[n - first + 1] - 1) return dfs(first, k, m, false);
      return dfs(pos + pos % 2 + 1, k - fib[n - first + 1] + 1, m, true);
    }
  } else {
    if (k <= fib[n - first + 1] - 1) return dfs(first, k, m, false);
    return dfs(pos + pos % 2 + 1, k - fib[n - first + 1] + 1, m, false);
  }
}
int main() {
  ios::sync_with_stdio(false);
  int i;
  long long k, m;
  cin >> n >> k >> m;
  fib[1] = 1;
  for (i = 2; i < 93; i++) fib[i] = fib[i - 2] + fib[i - 1];
  for (i = 93; i < 93 * 20; i++) fib[i] = fib[i - 1];
  s[1] = "1", s[2] = "01";
  for (i = 3; i < 20; i++) s[i] = s[i - 2] + s[i - 1];
  for (i = 20; i < 20 * 20; i++) s[i] = s[i - 2];
  dfs(0, k, m, true);
}
