#include<bits/stdc++.h> 
#include <ext/pb_ds/assoc_container.hpp> 
#include <ext/pb_ds/tree_policy.hpp> 
using namespace std;
using namespace __gnu_pbds;  
#define ordered_set tree<ll, null_type , less<ll> , rb_tree_tag , tree_order_statistics_Node_update> 
#define ll long long
#define ull unsigned long long
#define pb push_back
#define inf 1e18
#define mk make_pair
#define ld long double
#define mod 1000000007
#define fi first
#define se second
#define fastIO ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define test ll t; cin>>t; while(t--)
#define setbits __builtin_popcount
#define endl '\n'
#define LOCAL
#define sim template < class c
#define ris return * this
#define dor > debug & operator <<
#define eni(x) sim > typename \
enable_if<sizeof dud<c>(0) x 1, debug&>::type operator<<(c i) {
sim > struct rge { c b, e; };
sim > rge<c> range(c i, c j) { return rge<c>{i, j}; }
sim > auto dud(c* x) -> decltype(cerr << *x, 0);
sim > char dud(...);
struct debug {
#ifdef LOCAL
~debug() { cerr << endl; }
eni(!=) cerr << boolalpha << i; ris; }
eni(==) ris << range(begin(i), end(i));}
sim, class b dor(pair < b, c > d) {
    ris << "(" << d.first << ", " << d.second << ")";
}
sim dor(rge<c> d) {
    *this << "[";
    for (auto it = d.b; it != d.e; ++it)
        *this << ", " + 2 * (it == d.b) << *it;
    ris << "]";
}
#else
sim dor(const c&) { ris; }
#endif
};
#define imie(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "
#define maxn 61
int main()
{
    fastIO;
    vector<vector<ll>>ncr(maxn,vector<ll>(maxn));
    ncr[0][0]=1;
    for(int i=1;i<maxn;i++)
    {
        ncr[i][0]=1;
        for(int j=1;j<i;j++)
        {
            ncr[i][j]=ncr[i-1][j] + ncr[i-1][j-1];
        }
        ncr[i][i]=1;
    }
    ll a,b,k;
    cin>>a>>b>>k;
    string ans;
    ll n=a+b;
    for(int i=0;i<n;i++)
    {
        if(k<=ncr[a+b-1][b])
        {
            ans+='a';
            a--;
        }
        else{
            ans+='b';
            k-=ncr[a+b-1][b];
            b--;
        }
    }
    cout<<ans<<endl;
}
#include <bits/stdc++.h>
#define MAX_H 16
#define MAX_W 16
using namespace std;
typedef long long ll;

ll H, W, A, B;
bool used[MAX_H][MAX_W];

ll dfs(ll i, ll bit, ll a, ll b) {
  if (i == H * W) return 1;
  if (bit & 1 << i) return dfs(i + 1, bit, a, b);
  ll res = 0;
  if (b) res += dfs(i + 1, bit | 1 << i, a, b - 1);
  if (a) {
    if (i % W != W - 1 && ~bit && 1 << (i + 1))
      res += dfs(i + 1, bit | 1 << i | 1 << (i + 1), a - 1, b);
    if (i + W < H * W) res += dfs(i + 1, bit | 1 << i | 1 << (i + W), a - 1, b);
  }
  return res;
}

int main() {
  cin >> H >> W >> A >> B;
  ll res = dfs(0, 0, A, B);
  printf("%lld\n", res);
}