#include <bits/stdc++.h>
using namespace std;
#define ld double
#define ll long long
#define pb emplace_back
#define mk make_pair
#define mod 1000000007
#define ff first
#define sz(v) (int)v.size();
#define ss second
#define FIO ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define all(x) x.begin(),x.end()
ll power(ll a, ll b){ll res=1;a=a%mod; while(b){if(b&1)res=(res*a)%mod; a=(a*a)%mod;b/=2;}return res;}
ll invmod(ll a){return power(a,mod-2);}
ll  h,w,a,b;
ll dp[17][17];
int solve(int r,int c,int i,int j){
	if(i<0||j<0) return 0;

	if(c>=w){
		c=0;
		r++;
	}

	if(dp[r][c]) return solve(r,c+1,i,j);

	if(r==h) return 1;
	ll ans = solve(r,c+1,i,j-1);

	dp[r][c]=1;

	if(c+1<w && dp[r][c+1]==0) {
		dp[r][c+1]=1;
		ans += solve(r,c+2,i-1,j);
		dp[r][c+1]=0;
	}
	if(r+1<h && dp[r+1][c]==0){
		dp[r+1][c]=1;
		ans+=solve(r,c+1,i-1,j);
		dp[r+1][c]=0;
	}
	dp[r][c]=0;
	return ans;
}
int main(void)
{
	FIO	
	cin>>h>>w>>a>>b;
	cout<<solve(0,0,a,b);
	return 0;
}
#include <iostream>
#include <string>
using namespace std;

int main(void){
    
    long long nCr[61][61]={};//0で初期化
    
    nCr[0][0]=1;
    for(int i=1;i<=60;i++){
        for(int j=0;j<=i;j++){
            if(j!=0){
                nCr[i][j] += nCr[i-1][j-1];
            }
            if(j!=i){
                nCr[i][j] += nCr[i-1][j];
            }
        }
    }
    
    long long A,B,K;
    cin >> A >> B >> K;
    
    string S;
    long long C = A+B;
    
    for(int i=0;i<C;i++){
        
        //aがA個、bがB個ある
        //前から(A+B-1)C(A-1)個は先頭がa
        //その範囲に入った場合、a+((A+B-1)C(A-1)個中前からK個目)が答え
        //そうでなければ、b+((A+B-1)C(A)個中前からK-(A+B-1)C(A-1)個目)が答え
        if(A!=0 && K <= nCr[A+B-1][A-1]){
            S.push_back('a');
            A--;
        }else{
            S.push_back('b');
            K -= nCr[A+B-1][A-1];
            B--;
        }
    }
    
    cout << S << endl;
    
    return 0;
}