#include <bits/stdc++.h>
using namespace std;
auto ___x = []() {
  cin.sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  return 0;
}();
long long gcd(long long a, long long b) {
  long long t;
  if (a < b) swap(a, b);
  while (b) {
    t = b;
    b = a % b;
    a = t;
  }
  return a;
}
int const maxn = INT_MAX;
struct Edge {
  int to;
  long long w;
  Edge() {}
  Edge(int _to, int _w) : to(_to), w(_w) {}
};
void solve();
int main() {
  solve();
  return 0;
}
int a, b, c, d;
int m = 50, n = 50;
vector<vector<char>> g(m, vector<char>(50));
vector<vector<int>> dirs = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
bool inline inScalar(int i, int j) {
  return 0 <= i && i < m && 0 <= j && j < n;
}
bool canplace(int x, int y, char c) {
  for (auto &d : dirs) {
    int nx = x + d[0], ny = y + d[1];
    if (inScalar(nx, ny) && g[nx][ny] == c) return false;
  }
  return true;
}
void solve() {
  cin >> a >> b >> c >> d;
  vector<pair<int, char>> D = {{a, 'A'}, {b, 'B'}, {c, 'C'}, {d, 'D'}};
  D[0].first--;
  D[1].first--;
  g = vector<vector<char>>(m, vector<char>(n, '+'));
  priority_queue<pair<int, char>> pq(D.begin(), D.end());
  for (int i = 0; i < m / 2; ++i) {
    for (int j = 0; j < n; ++j) {
      g[i][j] = 'A';
    }
  }
  for (int i = m / 2; i < m; ++i) {
    for (int j = 0; j < n; ++j) {
      g[i][j] = 'B';
    }
  }
  for (int i = 1; i < m / 2; ++i) {
    for (int j = 1; j < n - 1; j += 2) {
      for (auto &p : D) {
        if (p.first > 0 && p.second != 'A') {
          if (canplace(i, j, p.second)) {
            g[i][j] = p.second;
            p.first--;
            break;
          }
        }
      }
    }
  }
  for (int i = m / 2 + 1; i < m; ++i) {
    for (int j = 1; j < n - 1; j += 2) {
      for (auto &p : D) {
        if (p.first > 0 && p.second != 'B') {
          if (canplace(i, j, p.second)) {
            g[i][j] = p.second;
            p.first--;
            break;
          }
        }
      }
    }
  }
  cout << m << ' ' << n << endl;
  for (int i = 0; i < m; ++i) {
    for (int j = 0; j < n; ++j) cout << g[i][j];
    cout << endl;
  }
}
