#include <bits/stdc++.h>
using namespace std;
void ASS(bool b) {
  if (!b) {
    ++*(int*)0;
  }
}
struct Man {
  char msk, pos, u;
  Man() {
    msk = pos = 0;
    u = -1;
  }
};
enum EEE { eThrow = 1, eGo = 2, eTake = 4 };
struct State {
  Man s[3];
  State Throw(int x, int newpos) const {
    ASS(s[x].u != -1);
    State res = *this;
    res.s[x].u = -1;
    res.s[x].msk |= eThrow;
    int y = s[x].u;
    res.s[y].pos = newpos;
    if (s[y].u != -1) res.s[s[y].u].pos = newpos;
    return res;
  }
  bool used(int x) const {
    for (int i = 0; i < (int)(3); i++)
      if (s[i].u == x) return 1;
    return 0;
  }
  bool canGo(int x) const {
    return (s[x].msk & eGo) == 0 && s[x].u == -1 && !used(x);
  }
  bool canTake(int x) const { return (s[x].msk & eTake) == 0 && !used(x); }
  bool canThrow(int x) const {
    return (s[x].msk & eThrow) == 0 && s[x].u != -1 && !used(x);
  }
  State move(int x, int newpos) const {
    State res = *this;
    res.s[x].u = -1;
    res.s[x].msk |= eGo;
    res.s[x].pos = newpos;
    return res;
  }
  State take(int x, int y) const {
    State res = *this;
    res.s[x].msk |= eTake;
    res.s[x].u = y;
    res.s[y].pos = s[x].pos;
    if (s[y].u != -1) res.s[s[y].u].pos = s[x].pos;
    return res;
  }
  bool free(int pos) const {
    return s[0].pos != pos && s[1].pos != pos && s[2].pos != pos;
  }
  int best() const { return max(s[0].pos, max(s[1].pos, s[2].pos)); }
  long long ID() const {
    long long res = 0;
    for (int i = 0; i < (int)(3); i++) {
      res = (res << 6) + s[i].pos;
      res = (res << 3) + s[i].msk;
      res = (res << 2) + s[i].u + 1;
    }
    return res;
  }
};
int dx[4];
int dy[4];
const int HS = 1 << 21;
struct HM {
  int ht[HS];
  struct node {
    long long x;
    int next;
    int b;
  };
  vector<node> h;
  HM() {
    h.resize(1);
    h.reserve(HS);
  }
  int& getBool(long long x) {
    int hh = ((x >> 16) ^ x) & (HS - 1);
    for (int t = ht[hh]; t; t = h[t].next)
      if (h[t].x == x) return h[t].b;
    int id = (int)h.size();
    h.resize(id + 1);
    node& nd = h.back();
    nd.x = x;
    nd.b = 0;
    nd.next = ht[hh];
    ht[hh] = id;
    return nd.b;
  }
} mp;
queue<State> q;
int ans = 0;
void add(const State& s) {
  int& b = mp.getBool(s.ID());
  if (b) return;
  b = 1;
  ans = max(ans, s.best());
  q.push(s);
}
int main() {
  State x;
  for (int i = 0; i < (int)(3); i++) {
    x.s[i].msk = 0;
    x.s[i].u = -1;
    int pos;
    cin >> pos >> dx[i] >> dy[i];
    x.s[i].pos = pos;
  }
  add(x);
  while (!q.empty()) {
    x = q.front();
    if (x.s[0].pos == 6 && x.s[2].pos == 5) {
      x = x;
    }
    q.pop();
    for (int i = 0; i < (int)(3); i++) {
      if (x.canGo(i)) {
        for (int newpos = max(1, x.s[i].pos - dx[i]);
             newpos <= x.s[i].pos + dx[i]; newpos++) {
          if (x.free(newpos)) add(x.move(i, newpos));
        }
      }
      if (x.canTake(i)) {
        for (int j = 0; j < (int)(3); j++)
          if (i != j) {
            int k = 3 - i - j;
            int z = j;
            if (x.s[k].pos == x.s[j].pos && x.s[k].u != -1) z = k;
            if (x.s[z].pos + 1 == x.s[i].pos || x.s[z].pos - 1 == x.s[i].pos) {
              add(x.take(i, z));
            }
          }
      }
      if (x.canThrow(i)) {
        for (int newpos = max(1, x.s[i].pos - dy[i]);
             newpos <= x.s[i].pos + dy[i]; newpos++)
          if (x.free(newpos)) add(x.Throw(i, newpos));
      }
    }
  }
  cout << ans << endl;
  return 0;
}
