#include <bits/stdc++.h>
using namespace std;

#define rep(i,n) for (int i = 0;i < (int)(n); ++i)
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }

typedef long long ll;

ll comb[61][61];

int main() {

    ll A, B, K;
    cin >> A >> B >> K;


    comb[0][0] = 1;
    rep(i, 60) {
        rep(j, i + 1) {
            comb[i + 1][j] += comb[i][j];
            comb[i + 1][j + 1] += comb[i][j];
        }
    }

    string ans = "";
    while(A + B > 0) {
        if(A == 0) {
            ans += 'b';
            B--;
            continue;
        }

        ll x = comb[A + B - 1][A - 1];
        if(x < K) {
            K -= x;
            ans += 'b';
            B--;
        } else {
            ans += 'a';
            A--;
        }
    }

    cout << ans << endl;
}
#include <iostream>

using namespace std;

__uint128_t T = 1;
long long MOD = (1LL << 61) - 1;

long long modinv(long long a, long long m) {
    long long b = m, u = 1, v = 0;
    while (b) {
        long long t = a / b;
        a -= t * b; swap(a, b);
        u -= t * v; swap(u, v);
    }
    u %= m;
    if (u < 0) u += m;
    return u;
}

void solve(int a, int b, long long k) {
  if (a + b == 1) {
    cout << (a == 1 ? 'a' : 'b') << endl;
    return;
  }
  long long t = T;
  if ((a + b) * k > a * t) {
    cout << 'b';
    T *= b;
    T /= a + b;
    solve(a, b - 1, k - (a * t) / (a + b));
  } else {
    cout << 'a';
    T *= a;
    T /= a + b;
    solve(a - 1, b, k);
  }
}

int main() {
  int A, B; cin >> A >> B;
  long long K; cin >> K;

  for (int i = max(A, B) + 1; i <= A + B; i++) {
    T *= i;
    T %= MOD;
  }
  for (int i = 2; i <= min(A, B); i++) {
    T *= modinv(i, MOD);
    T %= MOD;
  }

  solve(A, B, K);
}
