#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0, f = 1;
  char ch;
  do {
    ch = getchar();
    if (ch == '-') f = -1;
  } while (ch > '9' || ch < '0');
  do {
    x = x * 10 + ch - '0';
    ch = getchar();
  } while (ch >= '0' && ch <= '9');
  return f * x;
}
const int maxn = 100 + 5;
long long k, x, n, m, ans, flag, dp[maxn];
char s1[maxn], s2[maxn];
long long f[maxn];
char str1[maxn], str2[maxn];
long long cnta, cntb;
inline void print() {
  printf("%s\n", str1);
  printf("%s\n", str2);
  exit(0);
}
inline long long fib(long long a, long long b, long long k) {
  f[0] = 0;
  f[1] = a;
  f[2] = b;
  for (int i = 3; i <= k; i++) {
    f[i] = f[i - 1] + f[i - 2];
  }
  if (f[k] > 1e9) return -1;
  return f[k];
}
inline long long getmax(char s, char e, int l) {
  if (l == 1) {
    return 0;
  }
  if (l == 2) {
    if (s == 'A' && e == 'C')
      return 1;
    else
      return 0;
  }
  if (l == 3) {
    if (s == 'A' || e == 'C')
      return 1;
    else
      return 0;
  }
  if (l >= 4) {
    if (s == 'A' && e == 'C')
      return (l - 4) / 2 + 2;
    else if ((s != 'A' && e == 'C') || (s == 'A' && e != 'C'))
      return (l - 3) / 2 + 1;
    else
      return (l - 2) / 2;
  }
}
int main() {
  k = read();
  x = read();
  n = read();
  m = read();
  for (char s1 = 'A'; s1 <= 'C'; s1++) {
    for (char e1 = 'A'; e1 <= 'C'; e1++) {
      if (n == 1 && s1 != e1) continue;
      for (char s2 = 'A'; s2 <= 'C'; s2++) {
        for (char e2 = 'A'; e2 <= 'C'; e2++) {
          if (m == 1 && s2 != e2) continue;
          memset(dp, 0, sizeof(dp));
          char ls1 = s1, le1 = e1, ls2 = s2, le2 = e2;
          for (int i = 3; i <= k; i++) {
            dp[i] = dp[i - 2] + (le1 == 'A' && ls2 == 'C') + dp[i - 1];
            char ts = ls2;
            ls2 = ls1;
            ls1 = ts;
            le1 = le2;
          }
          long long tx = dp[k];
          if (tx > x) continue;
          long long t1 = getmax(s1, e1, n), t2 = getmax(s2, e2, m);
          for (int i = 0; i <= t1; i++) {
            for (int j = 0; j <= t2; j++) {
              long long ty = fib(i, j, k);
              if (ty < 0) continue;
              if (tx + ty == x) {
                long long xxx = i, yyy = j;
                str1[0] = s1;
                str1[n - 1] = e1;
                cnta = 1;
                str2[0] = s2;
                str2[m - 1] = e2;
                cntb = 1;
                if (n != 1) {
                  while (xxx--) {
                    if (cnta == 1 && str1[0] == 'A') {
                      str1[cnta++] = 'C';
                    } else {
                      str1[cnta++] = 'A';
                      str1[cnta++] = 'C';
                    }
                  }
                  for (int k = cnta; k < n - 1; k++) {
                    str1[k] = 'Z';
                  }
                }
                if (m != 1) {
                  while (yyy--) {
                    if (cntb == 1 && str2[0] == 'A') {
                      str2[cntb++] = 'C';
                    } else {
                      str2[cntb++] = 'A';
                      str2[cntb++] = 'C';
                    }
                  }
                  for (int k = cntb; k < m - 1; k++) {
                    str2[k] = 'Z';
                  }
                }
                print();
                return 0;
              }
            }
          }
        }
      }
    }
  }
  printf("Happy new year!\n");
  return 0;
}
