
/*
			Saturday 29 May 2021 05:32:07 PM IST
					@uthor::astrainL3gi0N
*/

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

typedef long long int ll;
typedef std::vector<int> vi;
typedef std::pair<int,int> ii;
typedef std::vector<ii> vii;
typedef std::vector<ll> vl;

#define pb push_back
#define mp make_pair
#define debg(x)	std::cerr<<(#x)<<" => "<<x<<'\n';
#define debgg(x,y)	std::cerr<<(#x)<<" => "<<x<<'\t'<<(#y)<<' '<<y<<'\n';
#define len(a) (int)(a).size()
#define all(x) x.begin(),x.end()
const int mod = 1000000007;
//const int mod = 998244353;

bool comp (ii x, ii y) {
    if (x.second == y.second)
        return x.first < y.first;
    return x.second < y.second;
}
template < typename T> void  printv (T &a) {
    cout<<'\n';
    for (auto it = a.begin(); it != a.end(); ++it)
        cout<<it->first<<' '<<it->second<<'\n';
}
int gint() {
    int n;  cin>>n;
    return n;
}
//int t[510][510];
ll ans;

void solve () {
    map <ii,int> hmp;
    int n = gint();
    vii vpr;
    vii arr;
    for (int i = 0; i < n;++i) {
        int x = gint();
        int y = gint();
        vpr.pb(mp(x,y));
        hmp[mp(x,y)] = i+1;
    }
    for (auto v:vpr) {
        arr.pb(mp(v.first,v.second));
    }
    vi vr;
    set <int> hsh;

    sort(all(vpr));
    hsh.insert(hmp[vpr[0]]);
    hsh.insert(hmp[vpr[1]]);
    hsh.insert(hmp[vpr[n-1]]);
    hsh.insert(hmp[vpr[n-2]]);
    for (auto &v: vpr) {
        swap(v.first,v.second);
    }
    sort(all(vpr));

    hsh.insert(hmp[mp(vpr[0].second,vpr[0].first)]);
    hsh.insert(hmp[mp(vpr[1].second,vpr[1].first)]);
    hsh.insert(hmp[mp(vpr[n-1].second,vpr[n-1].first)]);
    hsh.insert(hmp[mp(vpr[n-2].second,vpr[n-2].first)]);
    for (auto &v: vpr) {
        swap(v.first,v.second);
    }
    vii vrr;
    for (auto v: arr) {
        if (hsh.count(hmp[v]))
        vrr.pb(v);
    }

    for (int i = 0; i < len(vrr); ++i) {
        for (int j = i+1; j < len(vrr); ++j) {
            vr.pb(max(abs(vrr[i].first-vrr[j].first), 
                    abs(vrr[i].second-vrr[j].second)));
        }
    }
    sort(all(vr));
    cout<<vr[len(vr)-2];

}
void sol () {
    //test
    //cout << setprecision(15) << fixed;
}

int main () {
    int testcases = 1;
    for (int t = 0; t < testcases; ++t) {
        solve();
    }

    return 0;
}


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

using ll = long long;
#define rep(i, n, m) for (ll i = (n); i < (ll)(m); i++)

template <typename T>
vector<vector<T> > binomial_table(int N) {
  vector<vector<T> > mat(N + 1, vector<T>(N + 1));
  for (int i = 0; i <= N; i++) {
    for (int j = 0; j <= i; j++) {
      if (j == 0 || j == i)
        mat[i][j] = 1;
      else
        mat[i][j] = mat[i - 1][j - 1] + mat[i - 1][j];
    }
  }
  return mat;
}

int main() {
  auto c = binomial_table<ll>(61);
  ll a, b;
  cin >> a >> b;
  ll k;
  cin >> k;
  string ans;
  ll n = a + b;
  rep(i, 0, n) {
    if (a > 0 && c[a + b - 1][b] >= k) {
      ans += 'a';
      a--;
    } else {
      k -= c[a + b - 1][b];
      ans += 'b';
      b--;
    }
  }
  cout << ans << endl;
  return 0;
}
