#include <bits/stdc++.h>
using namespace std;
inline int Gcd(int X, int Y) { return Y ? Gcd(Y, X % Y) : X; }
inline long long Gcd(long long X, long long Y) { return Y ? Gcd(Y, X % Y) : X; }
inline int Pow(int base, long long exp, int _mod) {
  if (!(base %= _mod)) return 0;
  int _ans = 1;
  for (; exp; exp >>= 1, base = (long long)base * base % _mod)
    exp& 1 ? _ans = (long long)_ans * base % _mod : 0;
  return _ans;
}
inline long long Pow(long long base, long long exp, long long _mod) {
  if (!(base %= _mod)) return 0;
  long long _ans = 1;
  for (; exp; exp >>= 1, base = base * base % _mod)
    exp& 1 ? _ans = _ans * base % _mod : 0;
  return _ans;
}
const int INF = 0x3f3f3f3f;
int A, B, C, D;
char F[55][55];
int main() {
  scanf("%d%d%d%d", &A, &B, &C, &D);
  --A, --B, --C, --D;
  puts("50 50");
  for (int i = 1; i <= (25); ++i)
    for (int j = 1; j <= (25); ++j) F[i][j] = 'A';
  for (int i = 1; i <= (25); ++i)
    for (int j = 26; j <= (50); ++j) F[i][j] = 'B';
  for (int i = 26; i <= (50); ++i)
    for (int j = 1; j <= (25); ++j) F[i][j] = 'C';
  for (int i = 26; i <= (50); ++i)
    for (int j = 26; j <= (50); ++j) F[i][j] = 'D';
  for (int i = 2; i < 25; i += 2)
    for (int j = 2; j < 25; j += 2)
      if (B) F[i][j] = 'B', --B;
  for (int i = 2; i < 25; i += 2)
    for (int j = 27; j < 50; j += 2)
      if (C) F[i][j] = 'C', --C;
  for (int i = 27; i < 50; i += 2)
    for (int j = 2; j < 25; j += 2)
      if (D) F[i][j] = 'D', --D;
  for (int i = 27; i < 50; i += 2)
    for (int j = 27; j < 50; j += 2)
      if (A) F[i][j] = 'A', --A;
  for (int i = 1; i <= (50); ++i) printf("%s\n", F[i] + 1);
  return 0;
}
