#include <bits/stdc++.h>
using namespace std;
const int MOD = 10000007;
struct Data {
  int d[3], lift[3], s;
  Data() { d[0] = d[1] = d[2] = lift[0] = lift[1] = lift[2] = s = 0; }
  Data(int *a, int *b, int c) {
    d[0] = a[0];
    d[1] = a[1];
    d[2] = a[2];
    lift[0] = b[0];
    lift[1] = b[1];
    lift[2] = b[2];
    s = c;
  }
};
int h[MOD];
int gethash(const Data x) {
  int sum = 0;
  sum += x.d[0] * 107 + x.d[1] * 103 + x.d[2] * 101;
  sum += x.lift[0] * 67 + x.lift[1] * 59 + x.lift[2] * 61;
  sum += x.s * 1000007;
  if (sum < 0) sum = -sum;
  return sum % MOD;
}
int getkey(const Data x) {
  int sum = 0;
  sum += x.d[0] * 67 + x.d[1] * 59 + x.d[2] * 61;
  sum += x.lift[0] * 107 + x.lift[1] * 103 + x.lift[2] * 101;
  sum += x.s * 10000007;
  if (sum < 0) sum = -sum;
  return sum % MOD;
}
bool check(const Data x) {
  int i = gethash(x);
  int k = getkey(x);
  while (h[i] > -1 && h[i] != k) {
    i += 10007;
    if (i >= MOD) i -= MOD;
  }
  return (h[i] == k);
}
void insert(const Data x) {
  int i = gethash(x);
  while (h[i] > -1) {
    i += 10007;
    if (i >= MOD) i -= MOD;
  }
  h[i] = getkey(x);
}
int mov[3], thr[3], loc[3];
int ans;
void dfs(const Data now) {
  ans = max(ans, max(now.d[0], max(now.d[1], now.d[2])));
  for (int i = 0; i < 3; ++i) {
    bool flag = 1;
    for (int j = 0; j < 3; ++j)
      if (i != j && now.lift[j] == i) {
        flag = 0;
        break;
      }
    if (!flag) continue;
    Data nex;
    if ((now.lift[i] == i) && (now.s & (1 << (i * 3 + 0)))) {
      nex = now;
      nex.s -= (1 << (i * 3 + 0));
      int lef = now.d[i] - mov[i], rig = now.d[i] + mov[i];
      if (lef < 1) lef = 1;
      if (rig > 42) rig = 42;
      for (int j = rig; j >= lef; --j)
        if (j != now.d[0] && j != now.d[1] && j != now.d[2]) {
          nex.d[i] = j;
          if (check(nex)) continue;
          insert(nex);
          dfs(nex);
        }
    }
    if ((now.lift[i] == i) && (now.s & (1 << (i * 3 + 1)))) {
      nex = now;
      nex.s -= (1 << (i * 3 + 1));
      for (int j = 0; j < 3; ++j)
        if (now.d[i] - now.d[j] == 1 || now.d[i] - now.d[j] == -1) {
          nex.d[j] = now.d[i];
          nex.lift[i] = j;
          if (check(nex)) continue;
          insert(nex);
          dfs(nex);
        }
    }
    if ((now.lift[i] != i) && (now.s & (1 << (i * 3 + 2)))) {
      nex = now;
      nex.s -= (1 << (i * 3 + 2));
      nex.lift[i] = i;
      int lef = now.d[i] - thr[i], rig = now.d[i] + thr[i];
      if (lef < 1) lef = 1;
      if (rig > 42) rig = 42;
      for (int j = rig; j >= lef; --j)
        if (j != now.d[0] && j != now.d[1] && j != now.d[2]) {
          nex.d[now.lift[i]] = j;
          if (check(nex)) continue;
          insert(nex);
          dfs(nex);
        }
    }
  }
}
int main() {
  scanf("%d%d%d", &loc[0], &mov[0], &thr[0]);
  scanf("%d%d%d", &loc[1], &mov[1], &thr[1]);
  scanf("%d%d%d", &loc[2], &mov[2], &thr[2]);
  memset(h, -1, sizeof(h));
  int tmp[3] = {0, 1, 2};
  dfs(Data(loc, tmp, (1 << 9) - 1));
  printf("%d\n", ans);
  return 0;
}
