#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
const int MX = 123456;
const int mod = (int)1e9 + 7;
const int base = 1023456789;
const unsigned long long BS1 = 10000019ULL;
const int INF = (1 << 29);
template <class T>
inline void fastScan(T &x) {
  register char c = getchar();
  int neg = 0;
  x = 0;
  for (; (c < 48 || c > 57) && (c != '-'); c = getchar())
    ;
  if (c == '-') {
    neg = 1;
    c = getchar();
  }
  for (; c > 47 && c < 58; c = getchar()) {
    x = (x << 1) + (x << 3) + c - 48;
  }
  if (neg) x = -x;
}
int a, b, c, d;
char str[55][55];
int main() {
  fastScan(a);
  fastScan(b);
  fastScan(c);
  fastScan(d);
  for (int i = 1; i <= 50; i++)
    for (int j = 1; j <= 50; j++) str[i][j] = '.';
  for (int i = 1; i <= 50; i++) {
    str[26][i] = 'B';
  }
  for (int i = 1; i <= 50; i++) {
    str[25][i] = 'A';
  }
  a--;
  b--;
  for (int i = 27; i <= 33; i += 2) {
    for (int j = 1; j <= 50; j += 2) {
      if (a > 0) {
        str[i][j] = 'A';
        a--;
      }
    }
  }
  for (int i = 35; i <= 41; i += 2) {
    for (int j = 1; j <= 50; j += 2) {
      if (c > 0) {
        str[i][j] = 'C';
        c--;
      }
    }
  }
  for (int i = 43; i <= 49; i += 2) {
    for (int j = 1; j <= 50; j += 2) {
      if (d > 0) {
        str[i][j] = 'D';
        d--;
      }
    }
  }
  for (int i = 1; i <= 7; i += 2) {
    for (int j = 1; j <= 50; j += 2) {
      if (b > 0) {
        str[i][j] = 'B';
        b--;
      }
    }
  }
  for (int i = 1; i <= 24; i++) {
    for (int j = 1; j <= 50; j++) {
      if (str[i][j] == '.') {
        str[i][j] = 'A';
      }
    }
  }
  for (int i = 27; i <= 50; i++) {
    for (int j = 1; j <= 50; j++) {
      if (str[i][j] == '.') {
        str[i][j] = 'B';
      }
    }
  }
  printf("50 50\n");
  for (int i = 1; i <= 50; i++) {
    for (int j = 1; j <= 50; j++) {
      printf("%c", str[i][j]);
    }
    printf("\n");
  }
  return 0;
}
