#include <bits/stdc++.h>
using namespace std;
const char *IMP = "Happy new year!";
int K, X, n, m;
long long dp[55];
int M[55];
int getmaxac(int mask, int len) {
  if (len == 1) return mask == 0 || mask == 4 || mask == 8 ? 0 : -1;
  if (len == 2) return mask == 1;
  if (mask == 0) {
    return 1 + (len - 3) / 2;
  }
  if (mask == 1) {
    if (~len & 1)
      return len / 2;
    else
      return (len - 1) / 2;
  }
  if (mask == 2) {
    return 1 + (len - 3) / 2;
  }
  if (mask == 3) {
    return (len - 2) / 2;
  }
  if (mask == 4) {
    return 1 + (len - 3) / 2;
  }
  if (mask == 5) {
    return (len - 2) / 2;
  }
  if (mask == 6) {
    return (len - 2) / 2;
  }
  if (mask == 7) {
    return 1 + (len - 3) / 2;
  }
  if (mask == 8) {
    return (len - 2) / 2;
  }
  assert(0);
  return -1;
}
int getminac(int mask, int len) {
  if (len == 1) return 0;
  if (len == 2) return mask == 1;
  return 0;
}
int getmid(int mask1, int mask2) {
  int a = mask1 % 3, b = (mask2 / 3) % 3;
  return a == 0 && b == 1;
}
bool ok(int mask1, int ac1, int mask2, int ac2) {
  dp[1] = ac1, dp[2] = ac2;
  M[1] = mask1, M[2] = mask2;
  for (int(k) = (int)(3); (k) <= (int)(K); ++(k)) {
    dp[k] = dp[k - 2] + dp[k - 1];
    dp[k] += getmid(M[k - 2], M[k - 1]);
    M[k] = (M[k - 2] / 3 % 3 * 3) + (M[k - 1] % 3);
  }
  return dp[K] == X;
}
void output(int mask, int ac, int len) {
  static char s[200];
  memset((s), (0), sizeof((s)));
  s[1] = "ACX"[mask / 3 % 3];
  s[len] = "ACX"[mask % 3];
  if (len <= 2) {
    puts(s + 1);
    return;
  }
  if (s[1] == 'A') {
    int i = 1;
    while (ac--) s[i++] = 'A', s[i++] = 'C';
    for (i = max(i, 2); i < len; ++i) s[i] = 'X';
  } else if (s[len] == 'C') {
    int i = len;
    while (ac--) s[i--] = 'C', s[i--] = 'A';
    for (i = min(i, len - 1); i > 1; --i) s[i] = 'X';
  } else {
    int i = 2;
    while (ac--) s[i++] = 'A', s[i++] = 'C';
    for (; i < len; ++i) s[i] = 'X';
  }
  puts(s + 1);
}
int main(int argc, char const *argv[]) {
  cin >> K >> X >> n >> m;
  int ac1_max, ac2_max;
  for (int(mask1) = 0; (mask1) < (int)(9); ++(mask1)) {
    ac1_max = getmaxac(mask1, n);
    for (int(ac1) = (int)(getminac(mask1, n)); (ac1) <= (int)(ac1_max);
         ++(ac1)) {
      for (int(mask2) = 0; (mask2) < (int)(9); ++(mask2)) {
        ac2_max = getmaxac(mask2, m);
        for (int(ac2) = (int)(getminac(mask2, m)); (ac2) <= (int)(ac2_max);
             ++(ac2)) {
          if (ok(mask1, ac1, mask2, ac2)) {
            output(mask1, ac1, n);
            output(mask2, ac2, m);
            return 0;
          }
        }
      }
    }
  }
  puts(IMP);
  return 0;
}
