#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for(int i = 0; i < (n); ++i)
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
using ll = long long;
const long long INF = 1LL << 60;
const int SINF = 1LL << 30;
const ll mod = 1000000000+7;
const ll MOD = 998244353;
const int dx[8] = {1, 0, -1, 0, 1, -1, -1, 1};
const int dy[8] = {0, 1, 0, -1, 1, 1, -1, -1};
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; }

ll c[61][61];

int main() {
    int a, b;
    ll k;
    cin >> a >> b >> k;
    c[0][0] = 1;
    for(int i=1; i<=60; i++) {
        for(int j=0; j<=60; j++) {
            if(j-1 >= 0) c[i][j] += c[i-1][j-1];
            c[i][j] += c[i-1][j];
        }
    }

    string ans = "";
    while(a + b > 0) {
        if(b > 0 && k > c[a+b-1][b]) {
            ans.push_back('b');
            k -= c[a+b-1][b];
            b--;
        }
        else if(a > 0) {
            ans.push_back('a');
            a--;
        }
        else {
            ans.push_back('b');
            b--;
        }
    }
    cout << ans << endl;
}

/*
	ॐ
		JAI SHREE RAM

		Hare Krishna Hare Krishna Krishna Krishna Hare Hare
		Hare Rama Hare Rama Rama Rama Hare Hare
	
												ॐ
*/

//Written by Bhuwanesh Nainwal
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace __gnu_pbds;
using namespace std;

typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
pbds;



#define fast            	ios_base::sync_with_stdio(false) , cin.tie(NULL) , cout.tie(NULL)
#define int					long long int
#define vci              	vector<int>
#define vcvci             	vector<vector<int>>
#define vcpi             	vector<pair<int,int>>
#define vcs					vector<string>
#define pb              	push_back
#define mpii             	map<int , int>
#define mpsi             	map<string , int>
#define mpci             	map<char , int>
#define umpii             	unordered_map<int , int>
#define umpsi             	unordered_map<string , int>
#define umpci             	unordered_map<char , int>
#define all(x)				auto it = x.begin() ; it != x.end() ; it++
#define vcc              	vector<char>
#define vcs              	vector<string>
#define sti            		set<int>
#define stc            		set<char>
#define sts            		set<string>
#define pqmx				priority_queue<int>
#define pqmn				priority_queue<int , vi , greater<int>>
#define null            	NULL
#define ff            		first
#define ss              	second
#define stb(x)				__builtin_popcount(x)
#define lzr(x)				__builtin_clz(x)
#define tzr(x)					__builtin_ctz(x)
#define prc(x , y)          fixed << setprecision(y) << x
#define max3(a, b, c)   	max(a, max(b, c))
#define min3(a, b, c)   	min(a, min(b, c))

using namespace std;

const int mod = 1e9 + 7;
const int INF = 1e9;
const int LINF = 1e18;
const int N = 1e4;
const int chkprc = 1e-9;  // Check for precision error in double




void solve()
{	
	int a , b , k;
	cin >> a >> b >> k;

	int dp[62][62];
	dp[0][0] = 1;
	for(int i = 1 ; i <= 60 ; i++)
	{	
		dp[i][0] = 1;
		for(int j = 1 ; j < i ; j++)
		{

			dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1];
		}

		dp[i][i] = 1;
	}

	int n = a + b;
	for(int i = 0 ; i < n ; i++)
	{
		int cnt = dp[a + b - 1] [b];
		if(cnt >= k)
		{
			cout << 'a';
			a--;
		}
		else
		{
			cout << 'b';
			b--;
			k -= cnt;
		}

	}
}

void local()
{
#ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif // ONLINE_JUDGE
}

int32_t main()
{

    fast;
    //local();
    int T = 1;
    // cin>>T;

    while(T--)
    {
        solve();
    }

    return 0;
}