/* これを翻訳している間、あなたはあなたの人生のいくつかの貴重な瞬間を無駄にしました */

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

#define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll long long
#define pb push_back
#define fi first
#define se second
#define all(x) (x).begin(),(x).end()
#define S(x) (int)(x).size()
#define L(x) (int)(x).length()
#define ld long double
#define mem(x,y) memset(x,y,sizeof x)

#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
typedef tree<int , null_type , less<int> , rb_tree_tag , tree_order_statistics_node_update> ordered_set;

const int mod = 1e9+7;
const ll infl = 0x3f3f3f3f3f3f3f3fLL;
const int infi = 0x3f3f3f3f;
const int maxn = 60;

ll C[maxn + 1][maxn + 1];

void solve()
{
	int a,b;
	cin>>a>>b;
	ll K;
	cin>>K;
	/*string s = "aaabbb";
	do
	{
		cout<<s<<'\n';
	}while(next_permutation(all(s)));
	*/
	C[0][0] = 1;
	for (int n = 1; n <= maxn; ++n) 
	{
	    C[n][0] = C[n][n] = 1;
	    for (int k = 1; k < n; ++k)
	    C[n][k] = C[n - 1][k - 1] + C[n - 1][k];
	}
	int n=a+b;
	for(int i=0;i<n;i++)
	{
		if(a+b==1)
		{
			if(a==1) cout<<'a';
			else cout<<'b';
			break;
		}
		if(a>0)
		{
			if(C[a+b-1][b] >= K)
			{
				a--;
				cout<<'a';
				continue;
			}
			K-=C[a+b-1][b];
			b--;
			cout<<'b';
		}
		else
		{
			b--;
			cout<<'b';
		}
	}
	cout<<'\n';
}

int main()
{
	IOS
	int t=1;
	//cin>>t;
	while(t--)
	{
		solve();
	}
}

#include<bits/stdc++.h>
using namespace std;
int a,b;
long long k;
long long C(int x,int y){
	if(x<0||x<y)return 0;
    long long ans=1;
    for(long long i=0;i<y;++i)ans*=x-i,ans/=i+1;
    return ans;
}
int main(){
	scanf("%d%d%lld",&a,&b,&k);
	while(a||b){
		if(a&&k<=C(a+b-1,a-1))putchar('a'),a--;
		else k-=C(a+b-1,a-1),putchar('b'),b--;
	}
	return 0;
}