#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:100000000000000")
using namespace std;
const long long int INF = 2e9;
void take(string &f, long long int &ab, long long int &ae, long long int &ina) {
  ab = ae = ina = 0;
  if (f[0] == 'C')
    ab = 2;
  else if (f[0] == 'A')
    ab = 1;
  if (f[(long long int)(f).size() - 1] == 'C')
    ae = 2;
  else if (f[(long long int)(f).size() - 1] == 'A')
    ae = 1;
  for (long long int i = 0; i < ((long long int)(f).size()); i++) {
    if (i && f[i - 1] == 'A' && f[i] == 'C') ina++;
  }
}
long long int cnt(string &f, string &s, long long int k) {
  long long int ab = 0, bb = 0, ae = 0, be = 0, ina = 0, inb = 0;
  take(f, ab, ae, ina);
  take(s, bb, be, inb);
  for (long long int i = 0; i < (k - 2); i++) {
    long long int nb = 0, ne = 0, inn = 0;
    inn = ina + inb;
    if (ae == 1 && bb == 2) inn++;
    nb = ab;
    ne = be;
    ab = bb;
    ae = be;
    ina = inb;
    bb = nb;
    be = ne;
    inb = inn;
  }
  return inb;
}
void apply(string &f, long long int t) {
  long long int en = (long long int)(f).size() - 1;
  long long int a = t % 3;
  t /= 3;
  if (a == 0)
    f[en] = 'D';
  else if (a == 1)
    f[en] = 'A';
  else
    f[en] = 'C';
  a = t;
  if (a == 0)
    f[0] = 'D';
  else if (a == 1)
    f[0] = 'A';
  else
    f[0] = 'C';
}
bool gen_nx(string &f) {
  if ((long long int)(f).size() < 3) return true;
  if (f[1] == 'D') {
    f[1] = 'A';
    return false;
  }
  for (long long int i = 1; i < (long long int)(f).size() - 1; i++) {
    if (f[i] == 'D') {
      f[i] = (f[i - 1] == 'A' ? 'C' : 'A');
      if (f[i + 1] == 'D') f[i + 1] = (f[i] == 'A' ? 'C' : 'A');
      return false;
    }
  }
  if (f[1] == 'C') return true;
  f[1] = 'C';
  for (long long int i = 2; i < (long long int)(f).size() - 1; i++) f[i] = 'D';
  return false;
}
bool gensolve(long long int n, long long int m, long long int t1,
              long long int t2, long long int need, long long int k) {
  string f, s;
  f.resize(n);
  s.resize(m);
  for (long long int i = 0; i < ((long long int)(f).size()); i++) f[i] = 'D';
  for (long long int i = 0; i < ((long long int)(s).size()); i++) s[i] = 'D';
  apply(f, t1);
  apply(s, t2);
  string ns = s;
  do {
    do {
      if (cnt(f, ns, k) == need) {
        cout << f << endl << ns;
        return true;
      }
    } while (!gen_nx(ns));
    ns = s;
  } while (!gen_nx(f));
  return false;
}
int main() {
  long long int k, need, n, m;
  cin >> k >> need >> n >> m;
  for (long long int i = 0; i < (9); i++)
    for (long long int j = 0; j < (9); j++) {
      if (gensolve(n, m, i, j, need, k)) {
        return 0;
      }
    }
  cout << "Happy new year!";
}
