#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);
}
