#include <bits/stdc++.h>
using namespace std;
const int INF = (1 << 30) - 1;
const long double EPS = 1e-9;
const long double PI = fabsl(atan2l(0.0, -1.0));
class MegaString {
 public:
  int first;
  int last;
  long long cnt[6];
  MegaString() { memset(cnt, 0, sizeof(cnt)); }
  MegaString(int st) {
    first = last = st;
    memset(cnt, 0, sizeof(cnt));
    cnt[st]++;
  }
  MegaString merge(const MegaString &o) {
    MegaString res;
    for (int i = 0; i < 6; i++) {
      res.cnt[i] = cnt[i] + o.cnt[i];
    }
    res.first = first;
    res.last = o.last;
    if (last == 0 && o.first == 1) {
      res.cnt[2]++;
    }
    if (last == 1 && o.first == 0) {
      res.cnt[3]++;
    }
    if (last == 0 && o.first == 0) {
      res.cnt[4]++;
    }
    if (last == 1 && o.first == 1) {
      res.cnt[5]++;
    }
    return res;
  }
  void print() {
    ;
    ;
  }
};
int k, x, n, m;
MegaString ff[55];
int dp[111][3][111];
int f(int pos, int lst, int c, int a, int b) {
  if (c < 0) {
    return 0;
  }
  if (pos == n) {
    return c == 0;
  }
  int &res = dp[pos][lst][c];
  if (res != -1) {
    return res;
  }
  int from = 0;
  int to = 2;
  if (pos == 0) {
    from = to = a;
  }
  if (pos == n - 1) {
    from = to = b;
  }
  res = 0;
  for (int d = from; d <= to; d++) {
    int nc = c;
    if (lst == 0 && d == 1) {
      nc--;
    }
    int cres = f(pos + 1, d, nc, a, b);
    res |= cres;
  }
  return res;
}
int dp2[111][3][111];
int g(int pos, int lst, int c, int a, int b) {
  if (c < 0) {
    return 0;
  }
  if (pos == m) {
    return c == 0;
  }
  int &res = dp2[pos][lst][c];
  if (res != -1) {
    return res;
  }
  int from = 0;
  int to = 2;
  if (pos == 0) {
    from = to = a;
  }
  if (pos == m - 1) {
    from = to = b;
  }
  res = 0;
  for (int d = from; d <= to; d++) {
    int nc = c;
    if (lst == 0 && d == 1) {
      nc--;
    }
    int cres = g(pos + 1, d, nc, a, b);
    res |= cres;
  }
  return res;
}
bool can(int a, int b, int c, int d, int c1, int c2) {
  if (n == 1 && a != b) {
    return false;
  }
  if (m == 1 && c != d) {
    return false;
  }
  if (!f(0, 2, c1, a, b)) {
    return false;
  }
  if (!g(0, 2, c2, c, d)) {
    return false;
  }
  long long xx = c1 * ff[k - 1].cnt[0] + c2 * ff[k - 1].cnt[1];
  if (b == 0 && c == 1) {
    xx += ff[k - 1].cnt[2];
  }
  if (a == 1 && d == 0) {
    xx += ff[k - 1].cnt[3];
  }
  if (a == 1 && b == 0) {
    xx += ff[k - 1].cnt[4];
  }
  if (c == 1 && d == 0) {
    xx += ff[k - 1].cnt[5];
  };
  return xx == x;
}
const string alp = "ACD";
char tmp[111];
void out(int pos, int lst, int c, int a, int b) {
  if (pos == n) {
    tmp[pos] = 0;
    return;
  }
  int from = 0;
  int to = 2;
  if (pos == 0) {
    from = to = a;
  }
  if (pos == n - 1) {
    from = to = b;
  }
  for (int d = from; d <= to; d++) {
    int nc = c;
    if (lst == 0 && d == 1) {
      nc--;
    }
    if (f(pos + 1, d, nc, a, b)) {
      tmp[pos] = alp[d];
      out(pos + 1, d, nc, a, b);
      return;
    }
  }
  assert(false);
}
void out2(int pos, int lst, int c, int a, int b) {
  if (pos == m) {
    tmp[pos] = 0;
    return;
  }
  int from = 0;
  int to = 2;
  if (pos == 0) {
    from = to = a;
  }
  if (pos == m - 1) {
    from = to = b;
  }
  for (int d = from; d <= to; d++) {
    int nc = c;
    if (lst == 0 && d == 1) {
      nc--;
    }
    if (g(pos + 1, d, nc, a, b)) {
      tmp[pos] = alp[d];
      out2(pos + 1, d, nc, a, b);
      return;
    }
  }
  assert(false);
}
void out(int a, int b, int c) {
  out(0, 2, c, a, b);
  puts(tmp);
}
void out2(int a, int b, int c) {
  out2(0, 2, c, a, b);
  puts(tmp);
}
void solve() {
  scanf("%d%d%d%d", &k, &x, &n, &m);
  ff[0] = MegaString(0);
  ff[1] = MegaString(1);
  for (int i = 2; i < k; i++) {
    ff[i] = ff[i - 2].merge(ff[i - 1]);
  }
  ff[k - 1].print();
  for (int a = 0; a < 3; a++) {
    for (int b = 0; b < 3; b++) {
      for (int c = 0; c < 3; c++) {
        for (int d = 0; d < 3; d++) {
          memset(dp, -1, sizeof(dp));
          memset(dp2, -1, sizeof(dp2));
          for (int c1 = 0; c1 <= n; c1++) {
            for (int c2 = 0; c2 <= m; c2++) {
              if (can(a, b, c, d, c1, c2)) {
                ;
                out(a, b, c1);
                out2(c, d, c2);
                return;
              }
            }
          }
        }
      }
    }
  }
  puts("Happy new year!");
}
int main() {
  clock_t start = clock();
  solve();
  ;
  return 0;
}
