#include <bits/stdc++.h>
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
using namespace std;
const long long mod = 123457;
const long long N = 106 * 106;
const long long nax = 1e6 + 6;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  long long f[4];
  for (long long i = 0; i < 4; i++) cin >> f[i];
  char ans[51][51];
  f[0]--;
  f[1]--;
  for (long long i = 1; i <= 25; i++) {
    for (long long j = 1; j <= 50; j++) {
      ans[i][j] = 'A';
      if (i % 2 == 0 && j % 2 == 0) {
        for (char c : {'B', 'C', 'D'}) {
          if (f[c - 'A']) {
            f[c - 'A']--;
            ans[i][j] = c;
            break;
          }
        }
      }
    }
  }
  for (long long i = 26; i <= 50; i++) {
    for (long long j = 1; j <= 50; j++) {
      ans[i][j] = 'B';
      if (i % 2 == 1 && j % 2 == 1) {
        for (char c : {'A', 'C', 'D'}) {
          if (f[c - 'A']) {
            f[c - 'A']--;
            ans[i][j] = c;
            break;
          }
        }
      }
    }
  }
  cout << "50 50\n";
  for (long long i = 1; i <= 50; i++) {
    for (long long j = 1; j <= 50; j++) {
      cout << ans[i][j];
    }
    cout << '\n';
  }
  return 0;
}
