#include using namespace std; typedef long long ll; typedef long double ld; typedef pair ii; typedef vector vi; typedef vector vvi; typedef vector vii; #define x first #define y second #define pb push_back #define eb emplace_back #define rep(i,a,b) for(auto i=(a); i<(b); ++i) #define REP(i,n) rep(i,0,n) #define all(v) begin(v), end(v) #define sz(v) ((int) (v).size()) #define rs resize #define DBG(x) cerr << __LINE__ << ": " \ << #x<< " = " << (x) << endl template ostream& operator<<(ostream &os, const vector &v) { os << "\n["; for(const T &x : v) os << x << ','; return os << "]\n"; } namespace std { template struct hash> { public: size_t operator()(const pair &p) const { size_t x = hash()(p.x), y = hash()(p.y); return x ^ (y + 0x9e3779b9 + (x<<6) + (x>>2)); } }; } void run() { vi A(4), B(4, 0); cin >> A[3] >> B[2] >> A[2] >> B[1] >> A[1] >> B[0] >> A[0]; vector As = {"I", "X", "C", "M", ""}; vector Bs = {"V", "L", "D", "", ""}; ll lower = 0; ll upper = 1'000'000'000'000'000'000; vi Cu(4); while (upper - lower > 1) { ll m = (lower + upper)/2; bool pos = true; vi C(5, 0); for (ll i = 3; i >= 0; i--) { C[i] = max(A[i] - 3*(m-C[i+1]) - C[i+1], (ll) 0); if ((i == 0 && C[i] > 0) || (i > 0 && C[i] > A[i-1]) || (i > 0 && C[i] + B[i-1] > m)) { pos = false; } } if (pos) { Cu = C; upper = m; } else { lower = m; } } vector>> D(4); for (ll i = 0; i < 4; i++) { ll u = upper; ll x = Cu[i+1]; D[i].pb({As[i] + As[i+1], x}); A[i] -= x; if (x > 0) A[i+1] -= x; u -= x; x = min(B[i], A[i]/3); D[i].pb({Bs[i] + As[i] + As[i] + As[i], x}); B[i] -= x; A[i] -= 3*x; u -= x; if (A[i] != 0 && B[i] != 0) { if (A[i] == 1) { D[i].pb({Bs[i] + As[i], 1}); } else { D[i].pb({Bs[i] + As[i] + As[i], 1}); } u--; A[i] = 0; B[i]--; } if (A[i] != 0) { x = A[i]/3; D[i].pb({As[i] + As[i] + As[i], x}); A[i] -= 3*x; u -= x; if (A[i] == 1) { D[i].pb({As[i], 1}); u--; } else if (A[i] == 2) { D[i].pb({As[i] + As[i], 1}); u--; } A[i] = 0; } if (B[i] != 0) { D[i].pb({Bs[i], B[i]}); u -= B[i]; B[i] = 0; } D[i].pb({"", u}); u = 0; } vector> E; vi I(4, 0); ll u = upper; while (u > 0) { for (ll i = 0; i < 4; i++) { while (D[i][I[i]].y <= 0) { I[i]++; } } ll v = D[0][I[0]].y; string s = ""; for (ll i = 3; i >= 0; i--) { s += D[i][I[i]].x; v = min(v, D[i][I[i]].y); } E.pb({s, v}); u -= v; for (ll i = 0; i < 4; i++) { D[i][I[i]].y -= v; } } cout << upper << endl; cout << E.size() << endl; for (pair e : E) { cout << e.x << " " << e.y << endl; } } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout << fixed << setprecision(20); run(); return 0; }