#include <bits/stdc++.h>
using namespace std;
int ans;
struct tiny {
  int p, move_range, throw_range, num;
  int lift_on, lifted_on;
  bool moved, have_lifted;
  void init() {
    scanf("%d%d%d", &p, &move_range, &throw_range);
    ans = max(ans, p);
    num = 0;
    moved = have_lifted = false;
    lift_on = lifted_on = 0;
  }
} p[4];
void solve(tiny p1, tiny p2, tiny p3);
void dfs(tiny p1, tiny p2, tiny p3);
void solve(tiny p1, tiny p2, tiny p3) {
  if (!p1.moved) {
    if (!p1.lift_on && !p1.lifted_on) {
      int nowp = p1.p;
      for (int a = -p1.move_range; a <= p1.move_range; a++)
        if (a + nowp != p2.p && a + nowp != p3.p &&
            (a == 1 || a == p1.move_range || abs(a + nowp - p2.p) == 1 ||
             abs(a + nowp - p3.p) == 1)) {
          p1.moved = true;
          p1.p = a + nowp;
          dfs(p1, p2, p3);
        }
      p1.p = nowp;
      p1.moved = false;
    }
  }
  if (!p1.have_lifted) {
    if (!p1.lift_on && !p1.lifted_on) {
      if (!p2.lifted_on && abs(p1.p - p2.p) == 1) {
        p1.lift_on = p2.num;
        p2.lifted_on = p1.num;
        int nowp = p2.p;
        p2.p = p1.p;
        dfs(p1, p2, p3);
        p1.lift_on = 0;
        p2.lifted_on = 0;
        p2.p = nowp;
      }
      swap(p2, p3);
      if (!p2.lifted_on && abs(p1.p - p2.p) == 1) {
        p1.lift_on = p2.num;
        p2.lifted_on = p1.num;
        int nowp = p2.p;
        p2.p = p1.p;
        dfs(p1, p2, p3);
        p1.lift_on = 0;
        p2.lifted_on = 0;
        p2.p = nowp;
      }
    }
  }
  if (p1.lift_on) {
    if (p2.num == p1.lift_on) {
      for (int a = -p1.throw_range; a <= p1.throw_range; a++)
        if (a != 0 && (p3.p != p1.p + a || p3.lifted_on) &&
            (a == 1 || a == p1.throw_range ||
             (!p3.lifted_on && abs(p3.p - p1.p - a) == 1))) {
          p2.p = p1.p + a;
          p1.lift_on = 0;
          p2.lifted_on = 0;
          p1.have_lifted = true;
          dfs(p1, p2, p3);
        }
      p2.p = p1.p;
      p1.lift_on = p2.num;
      p2.lifted_on = p1.num;
      p1.have_lifted = false;
    }
    swap(p2, p3);
    if (p2.num == p1.lift_on) {
      for (int a = -p1.throw_range; a <= p1.throw_range; a++)
        if (a != 0 && (p3.p != p1.p + a || p3.lifted_on) &&
            (a == 1 || a == p1.throw_range ||
             (!p3.lifted_on && abs(p3.p - p1.p - a) == 1))) {
          p2.p = p1.p + a;
          p1.lift_on = 0;
          p2.lifted_on = 0;
          p1.have_lifted = true;
          dfs(p1, p2, p3);
        }
      p2.p = p1.p;
      p1.lift_on = p2.num;
      p2.lifted_on = p1.num;
      p1.have_lifted = false;
    }
  }
}
void dfs(tiny p1, tiny p2, tiny p3) {
  ans = max(max(ans, p1.p), max(p2.p, p3.p));
  solve(p1, p2, p3);
  solve(p2, p3, p1);
  solve(p3, p1, p2);
}
int main() {
  for (int a = 1; a <= 3; a++) p[a].init(), p[a].num = a;
  dfs(p[1], p[2], p[3]);
  printf("%d\n", ans);
  return 0;
}
