#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-10;
const complex<double> I(0, 1);
template <class Tp>
inline void upMax(const Tp &t, Tp &T) {
  if (t > T) T = t;
}
template <class Tp>
inline void upMin(const Tp &t, Tp &T) {
  if (t < T) T = t;
}
template <class Tp>
inline Tp Abs(const Tp &t) {
  return (t < 0) ? -t : t;
}
template <class Tp>
inline Tp Sqr(const Tp &t) {
  return t * t;
}
template <class Tp>
inline Tp qmax(const Tp &a, const Tp &b) {
  return (a > b) ? a : b;
}
template <class Tp>
inline Tp qmin(const Tp &a, const Tp &b) {
  return (a < b) ? a : b;
}
void setIO(string St) {
  string IN = St + ".in", OUT = St + ".out";
  freopen(IN.c_str(), "r", stdin);
  freopen(OUT.c_str(), "w", stdout);
}
const long long MaxD = 80;
struct State {
  int mt[3], po[3], c[3];
  inline long long GetHash() {
    long long p = 0;
    for (int i = 0; i != 3; i++) p = p * 4 + (long long)mt[i];
    for (int i = 0; i != 3; i++) p = p * 4 + (long long)c[i];
    for (int i = 0; i != 3; i++) p = p * MaxD + (long long)po[i];
    return p;
  }
} S1;
map<long long, bool> Gone;
int mov[4], thr[4], Ans;
int Ano(const int &a, const int &b) {
  for (int i = 0; i != 2; i++)
    if (i != a && i != b) return i;
  return 2;
}
bool CanGo(const State &S, int mb) {
  if (mb <= 0) return 0;
  for (int i = 0; i != 3; i++)
    if (S.c[i] <= 1 && mb == S.po[i]) return 0;
  return 1;
}
void Dfs(State S) {
  if (Gone[S.GetHash()]) return;
  Gone[S.GetHash()] = 1;
  for (int i = 0; i != 3; i++)
    if (!(S.mt[i] & 1) && S.c[i] == 0) {
      S.mt[i] ^= 1;
      for (int j = 1; j <= mov[i]; j++) {
        if (CanGo(S, S.po[i] + j)) {
          S.po[i] += j;
          upMax(S.po[i], Ans);
          Dfs(S);
          S.po[i] -= j;
        }
        if (CanGo(S, S.po[i] - j)) {
          S.po[i] -= j;
          Dfs(S);
          S.po[i] += j;
        }
      }
      S.mt[i] ^= 1;
    }
  for (int i = 0; i != 3; i++)
    if (!(S.mt[i] & 2) && S.c[i] == 0) {
      S.mt[i] ^= 2, S.c[i] = 1;
      for (int j = 0; j != 3; j++)
        if (Abs(S.po[j] - S.po[i]) == 1) {
          if (S.c[j] == 0) {
            S.c[j] = 2;
            Dfs(S);
            S.c[j] = 0;
          }
          if (S.c[j] == 1) {
            int k = Ano(i, j);
            S.c[j] = 2, S.c[k] = 3;
            Dfs(S);
            S.c[j] = 1, S.c[k] = 2;
          }
        }
      S.mt[i] ^= 2, S.c[i] = 0;
    }
  for (int i = 0; i != 3; i++)
    if (S.c[i] == 1) {
      int j = Ano(i, -1), k = Ano(i, j);
      if (S.c[j] > S.c[k]) swap(j, k);
      if (S.c[k] == 3) {
        S.c[i] = 0, S.c[j] = 1, S.c[k] = 2;
        for (int b = 1; b <= thr[i]; b++) {
          int Tmp = S.po[j];
          S.po[j] = S.po[k] = S.po[i] + b;
          upMax(S.po[j], Ans);
          Dfs(S);
          S.po[j] = S.po[k] = Tmp;
          if (S.po[i] - b > 0) {
            S.po[j] = S.po[k] = S.po[i] - b;
            Dfs(S);
            S.po[j] = S.po[k] = Tmp;
          }
        }
        S.c[i] = 1, S.c[j] = 2, S.c[k] = 3;
      } else {
        S.c[i] = 0, S.c[k] = 0;
        for (int b = 1; b <= thr[i]; b++) {
          int Tmp = S.po[k];
          if (S.po[j] != S.po[i] + b) {
            S.po[k] = S.po[i] + b;
            upMax(S.po[k], Ans);
            Dfs(S);
            S.po[k] = Tmp;
          }
          if (S.po[i] - b > 0 && S.po[j] != S.po[i] - b) {
            S.po[k] = S.po[i] - b;
            Dfs(S);
            S.po[k] = Tmp;
          }
        }
        S.c[i] = 1, S.c[k] = 2;
      }
    }
}
int main() {
  Ans = 0;
  for (int i = 0; i != 3; i++) {
    scanf("%d%d%d", &S1.po[i], &mov[i], &thr[i]);
    upMax(S1.po[i], Ans);
  }
  Dfs(S1);
  cout << Ans << endl;
  return 0;
}
