/**
 * code generated by JHelper
 * More info: https://github.com/AlexeyDmitriev/JHelper
 * @author
 */

#include <iostream>
#include <fstream>

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

inline int inint(istream& in) {int x; in >> x; return x;}
inline ll inll(istream& in) {ll x; in >> x; return x;}
inline string instr(istream& in) {string x; in >> x; return x;}

#define REP(i, n) for (int i = 0, i##_len = (n); i < i##_len; ++i)
#define FOR(i, a, b) for (int i = (a), i##_len = (b); i <= i##_len; ++i)
#define REV(i, a, b) for (int i = (a); i >= (b); --i)
#define CLR(a, b) memset((a), (b), sizeof(a))
#define DUMP(x) cout << #x << " = " << (x) << endl;
#define INF 1001001001001001001ll
#define fcout cout << fixed << setprecision(12)


class DAabAbaBaa {
public:
void solve(std::istream& in, std::ostream& out) {
    int A,B;
    ll K;
    A = inint(in);
    B = inint(in);
    K = inll(in);

    string ans = "";

    ll comb[62][62] = {0};
    comb[1][1] = 1;
    for (int i = 0; i < 61; ++i) {
        for (int j = 0; j < i  + 1; ++j) {
            comb[i + 1][j] += comb[i][j];
            comb[i + 1][j + 1] += comb[i][j];
        }
    }

    while(A + B > 0){
        ll now = comb[A + B][A];
        if(K > now){
            K -= now;
            B--;
            out << "b";
        }else{
            out << "a";
            A--;
        }
    }


    vector<int> re;







    out << endl;


}
};

int main() {
	DAabAbaBaa solver;
	std::istream& in(std::cin);
	std::ostream& out(std::cout);
	solver.solve(in, out);
	return 0;
}

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

long long A, B, K;
vector<int> ans(100, 0);

long long COM(long long n, long long k) {
	long long ans = 1;
	for (long long i = 1; i <= k; i++) {
		ans = ans * (n - i + 1) / i;
	}
  	return ans;
}

void saiki(long long countA, long long now, long long rank) {
	if (now == A + B) {
		return;
	}
	else if (countA != A) {
		if ((K - rank) <= COM(A + B - now - 1, A - countA - 1)) {
			ans[now] = 1;
			saiki(countA + 1, now + 1, rank);
		}
		else {
			ans[now] = 2;
			saiki(countA, now + 1, rank + COM(A + B - now - 1, A - countA - 1));
		}
	}
	else {
		ans[now] = 2;
		saiki(countA, now + 1, rank + COM(A + B - now - 1, A - countA - 1));
	}
}

int main() {
	cin >> A >> B >> K;
	string S;
  	saiki(0, 0, 0);
	for (int i = 0; i < A + B; i++) {
		if (ans[i] == 1) S = S + 'a';
		else S = S + 'b';
	}
	cout << S << endl;
}