#include <bits/stdc++.h>   #pragma comment(linker,  /STACK:16777216 )   using namespace std;   struct post {     int pos[3];     int st[3];     int mv;   };   inline int code(const post& p) {     int q = p.mv;     for (int _n((3) - 1), i(0); i <= _n; i++) q = q * 44 + p.pos[i];     for (int _n((3) - 1), i(0); i <= _n; i++) q = q * 5 + p.st[i];     return q;   }   inline post decode(int q) {     post p;     for (int i = (2), _b = (0); i >= _b; i--) {       p.st[i] = q % 5;       q /= 5;     }     for (int i = (2), _b = (0); i >= _b; i--) {       p.pos[i] = q % 44;       q /= 44;     }     p.mv = q;     return p;   }   int a, b, c, d, i, j, n, m, k;   int ans = 0;   bool used[100000001];   int fm[3], ft[3];   queue<int> q;   inline void add(const post& p) {     for (int _n((3) - 1), i(0); i <= _n; i++) {       if (p.pos[i] < 0) return;       if (p.pos[i] > ans) ans = p.pos[i];     }     int qq = code(p);     if (used[qq]) return;     used[qq] = 1;     q.push(qq);   }   int main() {     post p;     memset((p.pos), 0, sizeof(p.pos));     memset((p.st), 0, sizeof(p.st));     p.mv = 0;     for (int _n((3) - 1), i(0); i <= _n; i++) {       scanf( %d%d%d , &p.pos[i], &fm[i], &ft[i]);       p.pos[i] += 2;     }     add(p);     while (!q.empty()) {       post cur = decode(q.front());       q.pop();       for (int _n((3) - 1), i(0); i <= _n; i++) {         if (cur.mv & 1 << i) continue;         if (cur.st[i] != 0 && cur.st[i] != 4) continue;         bool ok = 1;         for (int _n((3) - 1), j(0); j <= _n; j++) {           if (cur.st[j] == i + 1) {             ok = 0;             break;           }         }         if (!ok) continue;         for (int _n(fm[i]), dx(-fm[i]); dx <= _n; dx++) {           if (!dx) continue;           post nx = cur;           nx.pos[i] += dx;           int o = 0;           for (int _n((3) - 1), z(0); z <= _n; z++) {             if (nx.pos[z] == nx.pos[i]) ++o;           }           if (o > 1) continue;           nx.mv |= 1 << i;           add(nx);         }       }       for (int _n((3) - 1), i(0); i <= _n; i++) {         if (cur.st[i] != 0) continue;         bool ok = 1;         for (int _n((3) - 1), j(0); j <= _n; j++) {           if (cur.st[j] == i + 1) {             ok = 0;             break;           }         }         if (!ok) continue;         for (int _n((3) - 1), j(0); j <= _n; j++) {           if (i == j) continue;           if (cur.pos[j] != cur.pos[i] + 1 && cur.pos[j] != cur.pos[i] - 1)             continue;           bool ok = 1;           for (int _n((3) - 1), z(0); z <= _n; z++) {             if (cur.st[z] == j + 1) {               ok = 0;               break;             }           }           if (!ok) continue;           post nx = cur;           nx.st[i] = j + 1;           nx.pos[j] = nx.pos[i];           if (nx.st[j] != 0 && nx.st[j] != 4) {             for (int _n((3) - 1), z(0); z <= _n; z++) nx.pos[z] = cur.pos[i];           }           add(nx);         }       }       for (int _n((3) - 1), i(0); i <= _n; i++) {         if (cur.st[i] == 0 || cur.st[i] == 4) continue;         bool ok = 1;         for (int _n((3) - 1), j(0); j <= _n; j++) {           if (cur.st[j] == i + 1) {             ok = 0;             break;           }         }         if (!ok) continue;         for (int _n(ft[i]), dx(-ft[i]); dx <= _n; dx++) {           if (!dx) continue;           bool ok = 1;           for (int _n((3) - 1), z(0); z <= _n; z++) {             if (cur.pos[z] == dx + cur.pos[i]) continue;           }           post nx = cur;           int pt = cur.st[i] - 1;           nx.pos[pt] = cur.pos[i] + dx;           if (cur.st[pt] > 0 && cur.st[pt] < 4)             nx.pos[cur.st[pt] - 1] = cur.pos[i] + dx;           nx.st[i] = 4;           add(nx);         }       }     }     printf( %d n , ans - 2);   }