/*AUTHOR - LAKSHYA JAIN*/
#include <bits/stdc++.h> 
using namespace std;
#define ll                long long
#define pb                push_back
#define vi                vector<int>
#define vl                vector<long long>
#define vll               vector<pair<long long,long long>>
#define vii               vector<pair<int,int>>
#define vvi               vector<vector<int>>
#define maxq(x)           priority_queue<x>
#define minq(x)           priority_queue<x,vector<x>,greater<x>>
#define graph             map<int,vi>
#define vvl               vector<vector<long long>>
#define pb                push_back
#define ppb               pop_back
#define pf                push_front
#define ppf               pop_front
#define all(x)            (x).begin(),(x).end()
#define uniq(v)           (v).erase(unique(all(v)),(v).end())
#define sz(x)             (int)((x).size())
#define f                 first
#define s                 second
#define pii               pair<int,int>
#define rep(i,a,b)        for(int i=a;i<b;i++)
#define rrep(i,a,b)       for(int i = a;i>=b;i--)
#define mem1(a)           memset(a,-1,sizeof(a))
#define mem0(a)           memset(a,0,sizeof(a))
#define ppc               __builtin_popcount
#define ppcll             __builtin_popcountll
# define quick ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
vvl dp;
string solve(int a,int b,ll k)
{
    if(a == 0)
    {
        string temp(b,'b');
        return temp;
    }
    if(b == 0)
    {
        string temp(a,'a');
        return temp;
    }
    if(dp[a - 1][b]>=k)
    return 'a' + solve(a - 1,b,k);
    return 'b' + solve(a,b - 1,k - dp[a - 1][b]);
}
int main() 
{  
  quick
  int T = 1;
  //cin>>T;
  #ifndef ONLINE_JUDGE
  freopen("input.txt","r",stdin);
  freopen("output.txt","w",stdout);
  #endif
  while(T--)
  {
    int a,b;
    ll k;
    cin>>a>>b>>k;
    dp = vvl(a + 1,vl(b + 1,0));
    dp[0][0] = 1;
    rep(i,0,a + 1)
    {
        rep(j,0,b + 1)
        {
            if(i>0)
            dp[i][j] += dp[i - 1][j];
            if(j>0)
            dp[i][j] += dp[i][j - 1];
        }
    }
    cout<<solve(a,b,k);
  }
  return 0;
   
} 
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <algorithm>
#include <string>
#include <cmath>
#include <cstdio>
#include <iomanip>
#include <fstream>
#include <cassert>
#include <cstring>
#include <unordered_set>
#include <unordered_map>
#include <numeric>
#include <ctime>
#include <bitset>
#include <complex>
#include <chrono>
#include <random>
#include <functional>

using namespace std;

#define int long long

const int N = 70;
const int INF = 1e18 + 239;

int C[N][N];

void init() {
    for (int i = 0; i < N; i++) {
        C[i][0] = 1;
        C[i][i] = 1;
        for (int j = 1; j < i; j++) {
            C[i][j] = min(INF, C[i - 1][j] + C[i - 1][j - 1]);
        }
    }
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    init();

    int a, b, k;
    cin >> a >> b >> k;
    k--;
    while (a > 0 || b > 0) {
        if (a == 0) {
            cout << 'b';
            b--;
            continue;
        }
        if (b == 0) {
            cout << 'a';
            a--;
            continue;
        }
        if (C[a + b - 1][a - 1] <= k) {
            k -= C[a + b - 1][a - 1];
            cout << 'b';
            b--;
        } else {
            cout << 'a';
            a--;
        }
    }
    cout << '\n';
}
