#include <bits/stdc++.h>
using namespace std;
int mtx[55][55];
int main() {
  int a, b, c, d;
  cin >> a >> b >> c >> d;
  --a;
  --b;
  for (int i = 1; i <= 25; ++i) {
    for (int j = 1; j <= 50; ++j) {
      mtx[i][j] = 'A';
    }
  }
  for (int i = 26; i <= 50; ++i) {
    for (int j = 1; j <= 50; ++j) {
      mtx[i][j] = 'B';
    }
  }
  deque<pair<int, int>> dq;
  dq.push_back(make_pair('B', b));
  dq.push_back(make_pair('C', c));
  dq.push_back(make_pair('D', d));
  for (int i = 2; i <= 24; i += 2) {
    for (int j = 2; j <= 48; ++j) {
      while (!dq.empty() && dq.front().second == 0) {
        dq.pop_front();
      }
      if (!dq.empty() && mtx[i][j - 1] != dq.front().first) {
        mtx[i][j] = dq.front().first;
        --dq.front().second;
        if (dq.front().second == 0) {
          dq.pop_front();
        }
        if (!dq.empty()) {
          dq.push_back(dq.front());
          dq.pop_front();
        }
      }
    }
  }
  dq.clear();
  dq.push_back(make_pair('A', a));
  for (int i = 28; i <= 48; i += 2) {
    for (int j = 2; j <= 48; ++j) {
      while (!dq.empty() && dq.front().second == 0) {
        dq.pop_front();
      }
      if (!dq.empty() && mtx[i][j - 1] != dq.front().first) {
        mtx[i][j] = dq.front().first;
        --dq.front().second;
        if (dq.front().second == 0) {
          dq.pop_front();
        }
      }
    }
  }
  cout << "50 50\n";
  for (int i = 1; i <= 50; ++i) {
    for (int j = 1; j <= 50; ++j) {
      putchar(mtx[i][j]);
    }
    putchar('\n');
  }
  return 0;
}
