#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
#define int long long
#define inf 1000000000000000018
int mod = 1e9 + 7;
int po(int x, int y, int m)  { if (y == 0) return 1; int t = po(x, y / 2, m) % m; t = (t * t) % m; if (y & 1) return (t * x) % m;	return t % m; }

void fun() {
	vector<vector<int>> ncr(61, vector<int> (61));
	for (int r = 1; r < 61; ++r)
		ncr[0][r] = 0;
	ncr[0][0] = 1;
	for (int n = 1; n < 61; ++n) {
		ncr[n][0] = 1;
		for (int r = 1; r < 61; ++r) {
			ncr[n][r] = ncr[n - 1][r] + ncr[n - 1][r - 1];
		}
		ncr[n][n] = 1;
	}
	// cout << ncr[4][3];
	int a, b, k;
	cin >> a >> b >> k;
	int n = (a + b);
	for (int i = 0; i < n ; ++i) {
		int cnt = ncr[a - 1 + b][b];
		// cout << (a - 1 + b) << " " << b << " " << cnt << endl;
		if (cnt >= k) {
			cout << 'a';
			a -= 1;
		}
		else {
			cout << 'b';
			b -= 1;
			k -= cnt;
		}
	}
}

signed main() {

#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#endif

	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(0);

	int t = 1;
	// cin >> t;
	while (t--) {
		fun();
	}
	// cout << ncr[6][2];

	return 0;
}
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization ("unroll-loops")

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

#define ll long long
#define INF INT_MAX
#define FIO ios_base::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL);
#define mod 1000000007ll
#define forn(i,n) for(int i=0;i<n;i++)
#define forab(i,a,b) for(int i=a;i<=b;i++)
#define forba(i,b,a) for(int i=b;i>=a;i--)
#define debx(x) cout << #x << ": " << x << endl
#define debxy(x,y) cout << #x << ": " << x << ' ' << #y << ": " << y << endl
#define YESp cout << "YES" << endl
#define NOp cout << "NO" << endl
#define Yesp cout << "Yes" << endl
#define Nop cout << "No" << endl
#define write(a) cout << a << endl
#define ff first
#define ss second
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pb push_back
#define vi vector<int>
#define vll vector<ll>
#define vvi vector<vector<int>>
#define vpi vector<pair<int, int>>
#define pq priority_queue

ll fast_exp(ll base, ll power){ll ans=1;while(power){if(power&1)ans=(ans*base)%mod;base=(base*base)%mod;power=power>>1;}return ans%mod;}
ll modInv(ll a,ll p){return fast_exp(a,p-2)%p;}
bool is_prime(int n){if(n==1){return false;}int i=2;while(i*i<=n){if(n%i==0){return false;}i+=1;}return true;}
ll gcd(ll a,ll b){if(a==0)return b;return gcd(b%a,a);}
ll modFact(ll n){if(n>=mod)return 0;ll result=1;for(ll i = 1; i <= n; i++)result=(result*i)%mod;return result;}

pii moves[] = {{-1, 0}, {1, 0}, {0 ,-1}, {0, 1}};


/****** S ****** X ****** T ****** Y ****** A ****** M ******/
ll ncr(ll n, ll r)
{
 
    // p holds the value of n*(n-1)*(n-2)...,
    // k holds the value of r*(r-1)...
    long long p = 1, k = 1;
 
    // C(n, r) == C(n, n-r),
    // choosing the smaller value
    if (n - r < r)
        r = n - r;
 
    if (r != 0) {
        while (r) {
            p *= n;
            k *= r;
 
            // gcd of p, k
            long long m = __gcd(p, k);
 
            // dividing by gcd, to simplify
            // product division by their gcd
            // saves from the overflow
            p /= m;
            k /= m;
 
            n--;
            r--;
        }
 
        // k should be simplified to 1
        // as C(n, r) is a natural number
        // (denominator should be 1 ) .
    }
 
    else
        p = 1;
 
    return p;
}

int main() {
  FIO
  // freopen("input.txt", "r", stdin);
  // freopen("output.txt", "w", sto");
  ll a, b, k;
  cin >> a >> b >> k;
  string ans = "";
  while(a > 0 || b > 0) {
    if(k == 1) {
      forn(i, a) ans += 'a';
      forn(i, b) ans += 'b';
      a = 0;
      b = 0;
      break;
    }
    ll mn = 1, mx = ncr(a+b-1, a-1);
    if(k <= mx) {
      ans += 'a';
      a--;
    } else {
      ans += 'b';
      b--;
      k -= mx;
    }
  }
  cout << ans << endl;
}