#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
template <typename T, typename TT>
inline ostream &operator<<(ostream &os, const pair<T, TT> &t) {
  return os << t.first << " " << t.second;
}
template <typename T>
inline ostream &operator<<(ostream &os, const vector<T> &t) {
  for (auto i : t) os << i << " ";
  return os;
}
template <typename T>
inline istream &operator>>(istream &is, vector<T> &v) {
  for (T &t : v) is >> t;
  return is;
}
template <typename T1, typename T2>
inline istream &operator>>(istream &is, pair<T1, T2> &t) {
  is >> t.first >> t.second;
  return is;
}
const long long mod = 1e9 + 7;
void solve() {
  int a, b, c, d;
  cin >> a >> b >> c >> d;
  vector<string> s(50, string(50, 'D'));
  for (int i = 0; i < 36; i++) {
    for (int j = 0; j < 50; j++) {
      s[i][j] = char('A' + (i / 12));
    }
  }
  a--, b--, c--, d--;
  for (int i = 1; i < 11; i += 2) {
    for (int j = 0; j < 50 and b; j += 2, b--) s[i][j] = 'B';
  }
  for (int i = 13; i < 23; i += 2) {
    for (int j = 0; j < 50 and c; j += 2, c--) s[i][j] = 'C';
  }
  for (int i = 25; i < 35; i += 2) {
    for (int j = 0; j < 50 and d; j += 2, d--) s[i][j] = 'D';
  }
  for (int i = 37; i < 50; i += 2) {
    for (int j = 0; j < 50 and a; j += 2, a--) s[i][j] = 'A';
  }
  cout << 50 << " " << 50 << '\n';
  for (auto x : s) cout << x << '\n';
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  ;
  int T = 1;
  while (T--) {
    solve();
  }
  return 0;
}
