#include #include #include using namespace std; using ll = long long; const ll INF = 1e18; ll cm, cd, cc, cl, cx, cv, ci; ll ccm, cxc, cix; map p[4]; void add(int w, ll c1, ll c2, char r1, char r2) { ll a = min(c1, c2 / 3); p[w][string(1, r1) + string(3, r2)] = a; c1 -= a; c2 -= 3 * a; p[w][string(3, r2)] = c2 / 3; c2 %= 3; if (c1) { p[w][string(1, r1) + string(c2, r2)] = 1; c1--; } else { p[w][string(c2, r2)] = 1; } p[w][string(1, r1)] += c1; } bool check(ll k) { ccm = max(0LL, cm - 3 * k); if (ccm > k || ccm > min(cc, cm) || k - ccm < cd) return false; ll uc = cc - ccm; cxc = max(0LL, uc - 3 * (k - ccm)); if (cxc > k || cxc > cx || k - cxc < cl) return false; ll ux = cx - cxc; cix = max(0LL, ux - 3 * (k - cxc)); if (cix > k || cix > ci || k - cix < cv) return false; ll ui = ci - cix; return 3 * (k - cix) >= ui; } int main() { cin >> cm >> cd >> cc >> cl >> cx >> cv >> ci; ll k = 0; for (ll b = INF; b >= 1; b /= 2) { while (!check(k + b)) k += b; } check(k + 1); cout << k + 1 << "\n"; p[0]["MMM"] = (cm - ccm) / 3; p[0][string((cm - ccm) % 3, 'M')] = 1; p[1]["CM"] = ccm; add(1, cd, cc - ccm - cxc, 'D', 'C'); p[2]["XC"] = cxc; add(2, cl, cx - cxc - cix, 'L', 'X'); p[3]["IX"] = cix; add(3, cv, ci - cix, 'V', 'I'); for (int i = 0; i < 4; i++) p[i][""] = 0; vector> answer; string r[4]; ll u[4] = {0}; while (true) { for (int i = 0; i < 4; i++) { while (u[i] == 0 && p[i].size()) { auto it = p[i].begin(); r[i] = it->first; u[i] = it->second; p[i].erase(it); } if (u[i] == 0) {u[i] = INF; r[i] = "";} } ll uu = min(min(u[0], u[1]), min(u[2], u[3])); for (int i = 0; i < 4; i++) u[i] -= uu; string rr = r[0] + r[1] + r[2] + r[3]; if (rr == "") break; answer.push_back({rr, uu}); } cout << answer.size() << "\n"; for (auto a : answer) { cout << a.first << " " << a.second << "\n"; } }