#include <bits/stdc++.h>
using namespace std;
const unsigned long long mul = 133;
inline void getint(int& num) {
  char c;
  bool flag = 0;
  num = 0;
  while ((c = getchar()) < '0' || c > '9')
    if (c == '-') flag = 1;
  while (c >= '0' && c <= '9') {
    num = num * 10 + c - 48;
    c = getchar();
  }
  if (flag) num = -num;
}
inline int abs(int x) { return x >= 0 ? x : -x; }
struct node {
  int x, up, down;
  bool used[3];
  inline unsigned long long hash() {
    unsigned long long h = x * mul * mul + up * mul + down;
    for (int i = 0; i < 3; i++) h = h * mul + used[i];
    return h;
  }
} player[5];
struct num {
  unsigned long long h1, h2, h3;
  bool operator<(const num& x) const {
    if (h1 == x.h1) {
      if (h2 == x.h2)
        return h3 < x.h3;
      else
        return h2 < x.h2;
    } else
      return h1 < x.h1;
  }
};
map<num, bool> visit;
int mov[5], thr[5], ans;
inline bool free(int x, node* p) {
  for (int i = 1; i <= 3; i++)
    if (p[i].x == x) return 0;
  return 1;
}
void dfs(node* p) {
  num h;
  h.h1 = p[1].hash();
  h.h2 = p[2].hash();
  h.h3 = p[3].hash();
  if (visit.count(h)) return;
  visit[h] = 1;
  for (int i = 1; i <= 3; i++) ans = max(ans, p[i].x);
  node tep[5];
  for (int i = 1; i <= 3; i++) tep[i] = p[i];
  for (int i = 1; i <= 3; i++) {
    if (p[i].down) continue;
    if (!p[i].used[0] && !p[i].up) {
      for (int j = p[i].x + 1; j <= p[i].x + mov[i]; j++) {
        if (!free(j, p)) continue;
        tep[i].x = j;
        tep[i].used[0] = 1;
        dfs(tep);
        tep[i] = p[i];
      }
      for (int j = max(1, p[i].x - mov[i]); j < p[i].x; j++) {
        if (!free(j, p)) continue;
        tep[i].x = j;
        tep[i].used[0] = 1;
        dfs(tep);
        tep[i] = p[i];
      }
    }
    if (!p[i].used[1] && !p[i].up) {
      for (int j = 1; j <= 3; j++)
        if (abs(p[i].x - p[j].x) == 1 && !p[j].down) {
          tep[j].down = i;
          tep[j].x = p[i].x;
          if (p[j].up) tep[p[j].up].x = p[i].x;
          tep[i].up = j;
          tep[i].used[1] = 1;
          dfs(tep);
          for (int k = 1; k <= 3; k++) tep[k] = p[k];
        }
    }
    if (!p[i].used[2] && p[i].up) {
      for (int j = p[i].x + 1; j <= p[i].x + thr[i]; j++) {
        if (!free(j, p)) continue;
        tep[p[i].up].x = j;
        if (p[p[i].up].up) tep[p[p[i].up].up].x = j;
        tep[p[i].up].down = 0;
        tep[i].up = 0;
        tep[i].used[2] = 1;
        dfs(tep);
        for (int k = 1; k <= 3; k++) tep[k] = p[k];
      }
      for (int j = max(1, p[i].x - thr[i]); j < p[i].x; j++) {
        if (!free(j, p)) continue;
        tep[p[i].up].x = j;
        if (p[p[i].up].up) tep[p[p[i].up].up].x = j;
        tep[p[i].up].down = 0;
        tep[i].up = 0;
        tep[i].used[2] = 1;
        dfs(tep);
        for (int k = 1; k <= 3; k++) tep[k] = p[k];
      }
    }
  }
}
int main() {
  for (int i = 1; i <= 3; i++) {
    getint(player[i].x);
    getint(mov[i]), getint(thr[i]);
  }
  dfs(player);
  printf("%d\n", ans);
}
