#include <iostream>
#include <string>
constexpr int MAX = 30;
long long dp[MAX + 1][MAX + 1];
std::string find_kth(int A, int B, long long K) {
    if (A == 0) {
        return std::string(B, 'b');
    }
    if (B == 0) {
        return std::string(A, 'a');
    }
    if (K <= dp[A - 1][B]) {
        return std::string("a") + find_kth(A - 1, B, K);
    }
    else {
        return std::string("b") + find_kth(A, B - 1, K - dp[A - 1][B]);
    }
}
int main() {
    int A, B;
    long long K;
    std::cin >> A >> B >> K;
    dp[0][0] = 1;
    for (int i = 0; i <= A; ++i) {
        for (int j = 0; j <= B; ++j) {
            if (i > 0) {
                dp[i][j] += dp[i - 1][j];
            }
            if (j > 0) {
                dp[i][j] += dp[i][j - 1];
            }
        }
    }
    std::cout << find_kth(A, B, K) << '\n';
    return 0;
}
#include <iostream>
#include <algorithm>
#include <string>

// nCr
static long long Combination(int n, int r)
{
  if (n < r) return 0;
  if ((r * 2) > n) r = n - r;

  long long ans = 1;
  for (int up = 1, down = n; up <= r; up++, down--) {
    ans = ans * down / up;
  }
  return ans;
}

using namespace std;
int main(void) {
  int A, B;
  cin >> A >> B;
  long long K;
  cin >> K;

  int AB = A + B;
  int leftA = A;
  int pos = 0;
  string ans = "";
  long long anspos = 0;
  while (pos < AB) {

    if (leftA <= 0) {
      ans += 'b';
      pos++;
      continue;
    }
    long long low = Combination(AB - pos -1, leftA - 1);
    long long hi  = Combination(AB - pos -1, leftA);

    if (anspos + low < K) {
      anspos += low;
      ans += 'b';
    }
    else {
      ans += 'a';
      leftA--;
    }
    pos++;
  }
  cout << ans << endl;
  return 0;
}
