#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m,K,C[31][61];
int main(){
	cin>>n>>m>>K;K--;
	for(int i=0;i<=60;i++){
		C[0][i]=1;
		for(int j=1;j<=30&&j<=i;j++)C[j][i]=C[j][i-1]+C[j-1][i-1];
	}
	int t=0;
	for(int i=1;i<=n+m;i++){
		if(K>=C[m-t][n+m-i])K-=C[m-t][n+m-i],cout<<'b',t++;
		else cout<<"a";
	}
}
#include <bits/stdc++.h>

using namespace std;

#define REP(i, n) for(int i=0; i<(n); ++i)
#define RREP(i, n) for(int i=(n);i>=0;--i)
#define FOR(i, a, n) for (int i=(a); i<(n); ++i)
#define RFOR(i, a, b) for(int i=(a);i>=(b);--i)


#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()

#define DUMP(x) cerr<<#x<<" = "<<(x)<<endl
#define DEBUG(x) cerr<<#x<<" = "<<(x)<<" (L"<<__LINE__<<")"<<endl;

template<class T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  REP(i, SZ(v)) {
    if (i) os << " ";
    os << v[i];
  }
  return os;
}

template <class T>
void debug(const vector<T> &v) {
  cout << "[";
  REP(i, SZ(v)) {
    if(i) cout << ", ";
    cout << v[i];
  }
  cout << "]" << endl;
}

template<class T, class U>
ostream &operator<<(ostream &os, const pair<T, U> &p) {
  return os << p.first << " " << p.second;
}

template <class T, class U>
void debug(const pair<T, U> &p) {
  cout << "(" << p.first << " " << p.second << ")" << endl;
}

template<class T>
bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}

template<class T>
bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return true;
  }
  return false;
}

using ll = long long;
using ull = unsigned long long;
using ld = long double;
using P = pair<int, int>;
using vi = vector<int>;
using vll = vector<ll>;
using vvi = vector<vi>;
using vvll = vector<vll>;

const ll MOD = 1e9 + 7;
const ll MOD998 = 998244353;
const int INF = INT_MAX;
const ll LINF = LLONG_MAX;
const int inf = INT_MIN;
const ll linf = LLONG_MIN;
const ld eps = 1e-9;

const int MAX_C = 61;
long long Com[MAX_C][MAX_C];

void calc_com() {
  memset(Com, 0, sizeof(Com));
  Com[0][0] = 1;
  for (int i = 1; i < MAX_C; ++i) {
    Com[i][0] = 1;
    for (int j = 1; j < MAX_C; ++j) {
      Com[i][j] = (Com[i-1][j-1] + Com[i-1][j]);
    }
  }
}

int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  cout << fixed << setprecision(10);

  ll a, b, k; cin >> a >> b >> k;
  string ans = "";

  calc_com();

  ll rem = b;
  REP(i, a + b - 1) {
    if(Com[a + b - i - 1][rem] + 1 <= k) {
      ans += 'b';
      k -= Com[a + b - i - 1][rem];
      rem--;
    } else {
      ans += 'a';
    }
  }
  if(rem != 0) ans += 'b';
  else ans += 'a';
  cout << ans << endl;

  return 0;
}




































