#include <iostream> // cout, endl, cin
#include <algorithm> // min, max, swap, sort, reverse, lower_bound, upper_bound
#include <vector> //vector
using namespace std;
#define _LIBCPP_DEBUG 0
#define rep(i, n) for(int i = 0; i < (int)n; i++)
typedef long long ll;

string ans;

ll conbi(int s, int a){
    ll cans = 1;
    vector<int> v;
    rep(i, a) v.push_back(a - i);
    rep(i, a){
        cans *= s;
        for(auto it = v.begin(); it != v.end();){
            if(cans % *it == 0){
                cans /= *it;
                it = v.erase(it);
            }else{
                ++it;
            }
        }
        s--;
    }
    return cans;
}

void dfs(int a, int b, ll k){
    if(a == 0){
        rep(i, b) ans.push_back('b');
        return;
    }
    if(b == 0){
        rep(i, a) ans.push_back('a');
        return;
    }

    a--;
    int s = a + b;
    ll buf = conbi(s, min(a, b));
    //cout << "s : " << s << " buf : " << buf << " k : " << k;
    if(buf < k){
        //cout << " choice : b" << endl;
        ans.push_back('b');
        dfs(a+1, b-1, k-buf);
    }else{
        //cout << " choice : a" << endl;
        ans.push_back('a');
        dfs(a, b, k);
    }   
}

int main(){
    int a, b;
    ll k;
    cin >> a >> b >> k;
    dfs(a, b, k);

    cout << ans << endl;
}
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)
#define Pr pair<ll,ll>
#define Tp tuple<ll,ll,ll>
using Graph = vector<vector<int>>;

ll mod = 1000000007;

int main() {
    ll N; cin >> N;
    vector<Pr> s,t;
    string ans = "No";
    rep(i,N){
        ll x,y; cin >> x >> y;
        s.push_back(make_pair(x,y));
    }
    rep(i,N){
        ll x,y; cin >> x >> y;
        t.push_back(make_pair(x,y));
    }
    if(N==1){
        cout << "Yes" << endl; return 0;
    }
    ll dx = s[1].first - s[0].first;
    ll dy = s[1].second - s[0].second;
    double th1 = atan2(dy,dx);
    rep(i,N){
        rep(j,N){
            ll dx2 = t[j].first - t[i].first;
            ll dy2 = t[j].second - t[i].second;
            double th2 = atan2(dy2,dx2);
            if(dx*dx+dy*dy!=dx2*dx2+dy2*dy2) continue;
            set<Pr> pts;
            rep(k,N){
                pts.insert(s[k]);
            }
            rep(k,N){
                ll dx3 = t[k].first - t[i].first;
                ll dy3 = t[k].second - t[i].second;
                double ndx = dx3*cos(th1-th2) - dy3*sin(th1-th2);
                double ndy = dy3*cos(th1-th2) + dx3*sin(th1-th2);
                if(abs(round(ndx)-ndx)>=0.05) continue;
                if(abs(round(ndy)-ndy)>=0.05) continue;
                pts.erase(make_pair(s[0].first+round(ndx),s[0].second+round(ndy)));
            }
            if(pts.empty()){
                ans = "Yes"; //cout << i << " " << j << endl;
            }
        }
    }
    cout << ans << endl;
}