#include <bits/stdc++.h>
using namespace std;
const long long mod = (long long)1e9 + 7;
const int inf = (int)1e9;
const long long INF = (long long)2e18;
const int base = 1000 * 1000 * 1000;
const int maxn = 200005;
const long double pi = acosl(-1.0);
const long double eps = 1e-9;
void solve() {
  vector<pair<int, char>> d;
  for (int c = 'A'; c < 'E'; c++) {
    int x;
    cin >> x;
    d.push_back(make_pair(x, c));
  }
  sort(d.begin(), d.end());
  int n = 50;
  char font = d.front().second;
  vector<vector<char>> ans(n, vector<char>(n, font));
  char c = d.back().second;
  int cnt = d.back().first;
  pair<int, int> pos = make_pair(0, 0);
  while (cnt) {
    ans[pos.first][pos.second] = c;
    pos.second += 2;
    if (pos.second == n) {
      pos.first += 2;
      pos.second = 0;
    }
    cnt--;
  }
  d.pop_back();
  c = d.back().second;
  cnt = d.back().first;
  while (cnt) {
    ans[pos.first][pos.second] = c;
    pos.second += 2;
    if (pos.second == n) {
      pos.first += 2;
      pos.second = 0;
    }
    cnt--;
  }
  d.pop_back();
  c = d.back().second;
  cnt = d.back().first;
  char f = c;
  while (cnt > 1) {
    ans[pos.first][pos.second] = c;
    pos.second += 2;
    if (pos.second == n) {
      pos.first += 2;
      pos.second = 0;
    }
    cnt--;
  }
  d.pop_back();
  c = d.back().second;
  cnt = d.back().first;
  if (cnt == 1) {
    ans[n - 1][n - 1] = f;
  } else {
    pos = make_pair(n - 1, n - 1);
    while (cnt > 1) {
      ans[pos.first - 1][pos.second] = f;
      ans[pos.first - 1][pos.second - 1] = f;
      ans[pos.first][pos.second - 1] = f;
      pos.second -= 2;
      if (pos.second < 0) {
        pos.second = n - 1;
        pos.first -= 2;
      }
      cnt--;
    }
  }
  cout << n << ' ' << n << endl;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      cout << ans[i][j];
    }
    cout << endl;
  }
}
int main() {
  cin.sync_with_stdio(0);
  cout.sync_with_stdio(0);
  solve();
  return 0;
}
