#include<iostream>
#include<vector>
#include<string>
#include<array>
#include<algorithm>
#include<list>
#include<cmath>
#include<iomanip>
#include<queue>
#include<functional>
#include<climits>
#include<iterator>
#include<unordered_set>
#include<unordered_map>
#include<map>
#include<set>

#include<typeinfo>
#include<numeric>
#include<complex>
#include<memory>
#include<fstream>
#include<chrono>
#include<random>
using namespace std;

const double pi=4*atan(1.0);

constexpr long long mod=static_cast<long long>(1e9+7);

using cWeightEdges=vector<vector<pair<int,int>>>;
using cEdges=vector<vector<int>>;

int main(){
	long long x,y,z;
	cin>>x>>y>>z;

	bool is_find=false;
	long long n=1;
	string ans;
	while(2*(n-1)+1<=10000){
		long long rest=z-n*x;
		if(rest%y==0){
			long long m=rest/y;
			if(2*n-1+2*abs(m)-1+1<=10000){
				is_find=true;
				string s1(n,'c');
				string s2(n-1,'C');
				string s3(abs(m),'w');
				string s4(abs(m)-1,'C');
				if(m==0){
					ans+=s1+s2;
				}
				else if(m>0){
					ans+=s1+s2+s3+s4;
					ans+="C";
				}
				else{
					ans+=s1+s2+s3+s4;
					ans+="W";
				}
				break;
			}
		}
		++n;
	}

	if(!is_find){
		while(2*(n-1)+1<=10000){
			long long rest=z-n*y;
			if(rest%x==0){
				long long m=rest/x;
				if(2*n-1+2*abs(m)-1+1<=10000){
					is_find=true;
					string s1(n,'w');
					string s2(n-1,'C');
					string s3(abs(m),'c');
					string s4(abs(m)-1,'C');
					if(m==0){
						ans+=s1+s2;
					}
					else if(m>0){
						ans+=s1+s2+s3+s4;
						ans+="C";
					}
					else{
						ans+=s1+s2+s3+s4;
						ans+="W";
					}
					break;
				}
			}
		}
		++n;
	}

	if(is_find)cout<<ans<<endl;
	else cout<<"mourennaihasimasenn"<<endl;

	//system("pause");
	return 0;
}