#include <bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef pair<int, int> pi;
const int mod = 1e9 + 7;
const int MAXN = 4005;
#define rend fuck

int x, y, z;
string s;

int dp[51][51][51][51];
int link[51][3]; // -1 if failure, otherwise follow it's next
int fail[51];

bool rend[MAXN];

bool f(int x, int y, int z, int m){
	if(m == s.size()) m = fail[m];
	if(x + y + z == 0) return rend[m];
	if(~dp[x][y][z][m]) return dp[x][y][z][m];
	int ret = 0;
	if(link[m][0] != -1 && x && f(x-1, y, z, link[m][0])) ret = 1;
	if(link[m][1] != -1 && y && f(x, y-1, z, link[m][1])) ret = 1;
	if(link[m][2] != -1 && z && f(x, y, z-1, link[m][2])) ret = 1;
	return dp[x][y][z][m] = ret;
}

bool trial(){
	int p = 0;
	for(int i=1; i<s.size(); i++){
		while(p && s[i] != s[p]) p = fail[p];
		if(s[i] == s[p]) p++;
		fail[i+1] = p;
	}
	for(int i=0; i<s.size(); i++){
		for(int j=0; j<3; j++){
			int pos = i;
			if(s[i] > j + 'a'){
				link[i][j] = -1;
				continue;
			}
			while(pos && s[pos] != j + 'a') pos = fail[pos];
			if(s[pos] == j + 'a') pos++;
			link[i][j] = pos;
		}
	}
	for(int i=0; i<s.size(); i++){
		int pos = i;
		rend[i] = 1;
		for(int j=0; j<s.size(); j++){
			pos = link[pos][s[j] - 'a'];
			if(pos == -1){
				rend[i] = 0;
				break;
			}
		}
	}
	memset(dp, -1, sizeof(dp));
	return f(x, y, z, 0);
}

int main(){
	cin >> x >> y >> z;
	while(s.size() < x + y + z){
		s.push_back('c');
		if(trial()) continue;
		s.back() = 'b';
		if(trial()) continue;
		s.back() = 'a';
	}
	cout << s << endl;
}
