#include <bits/stdc++.h>
using namespace std;
struct HashType {
  long long T;
  HashType *Next;
};
const int BigNumber = 99991;
int Ans, WA, TA, WB, TB, WC, TC;
HashType *Hash[BigNumber];
bool Add(long long T) {
  int V = T % BigNumber;
  HashType *P = Hash[V];
  while (P != NULL)
    if (P->T == T)
      return true;
    else
      P = P->Next;
  P = new HashType;
  P->T = T;
  P->Next = Hash[V];
  Hash[V] = P;
  return false;
}
void DFS(int PA, int PB, int PC, int HA, int HB, int HC, int T) {
  if (PA <= 0 || PB <= 0 || PC <= 0) return;
  Ans = max(Ans, PA);
  Ans = max(Ans, PB);
  Ans = max(Ans, PC);
  long long Mask = 0;
  Mask = Mask * 70 + PA - 1;
  Mask = Mask * 70 + PB - 1;
  Mask = Mask * 70 + PC - 1;
  Mask = Mask * 3 + HA;
  Mask = Mask * 3 + HB;
  Mask = Mask * 3 + HC;
  Mask = Mask * 64 + T;
  if (Add(Mask)) return;
  if (PA == PB && PB == PC) {
    if (!HA)
      for (int i = -TA; i <= TA; i++)
        if (i) DFS(PA, PB + i, PC + i, 0, HB - 1, HC - 1, T);
    if (!HB)
      for (int i = -TB; i <= TB; i++)
        if (i) DFS(PA + i, PB, PC + i, HA - 1, 0, HC - 1, T);
    if (!HC)
      for (int i = -TC; i <= TC; i++)
        if (i) DFS(PA + i, PB + i, PC, HA - 1, HB - 1, 0, T);
    return;
  }
  bool LiftA = (PA == PB || PA == PC) && !HA;
  bool LiftB = (PB == PC || PB == PA) && !HB;
  bool LiftC = (PC == PA || PC == PB) && !HC;
  if ((~T & 1) && !LiftA && !HA)
    for (int i = PA - WA; i <= PA + WA; i++)
      if (i != PA && i != PB && i != PC) DFS(i, PB, PC, HA, HB, HC, T | 1);
  if ((~T & 2) && !LiftA && !HA) {
    if (abs(PA - PB) == 1 && !HB && !LiftB) DFS(PA, PA, PC, 0, 1, 0, T | 2);
    if (abs(PA - PC) == 1 && !HC && !LiftC) DFS(PA, PB, PA, 0, 0, 1, T | 2);
    if (abs(PA - PB) == 1 && LiftB) DFS(PA, PA, PA, 0, 1, 2, T | 2);
    if (abs(PA - PC) == 1 && LiftC) DFS(PA, PA, PA, 0, 2, 1, T | 2);
  }
  if ((~T & 4) && !LiftB && !HB)
    for (int i = PB - WB; i <= PB + WB; i++)
      if (i != PA && i != PB && i != PC) DFS(PA, i, PC, HA, HB, HC, T | 4);
  if ((~T & 8) && !LiftB && !HB) {
    if (abs(PB - PC) == 1 && !HC && !LiftC) DFS(PA, PB, PB, 0, 0, 1, T | 8);
    if (abs(PB - PA) == 1 && !HA && !LiftA) DFS(PB, PB, PC, 1, 0, 0, T | 8);
    if (abs(PB - PC) == 1 && LiftC) DFS(PB, PB, PB, 2, 0, 1, T | 8);
    if (abs(PB - PA) == 1 && LiftA) DFS(PB, PB, PB, 1, 0, 2, T | 8);
  }
  if ((~T & 16) && !LiftC && !HC)
    for (int i = PC - WC; i <= PC + WC; i++)
      if (i != PA && i != PB && i != PC) DFS(PA, PB, i, HA, HB, HC, T | 16);
  if ((~T & 32) && !LiftC && !HC) {
    if (abs(PC - PA) == 1 && !HA && !LiftA) DFS(PC, PB, PC, 1, 0, 0, T | 32);
    if (abs(PC - PB) == 1 && !HB && !LiftB) DFS(PA, PC, PC, 0, 1, 0, T | 32);
    if (abs(PC - PA) == 1 && LiftA) DFS(PC, PC, PC, 1, 2, 0, T | 32);
    if (abs(PC - PB) == 1 && LiftB) DFS(PC, PC, PC, 2, 1, 0, T | 32);
  }
  if (LiftA && HB)
    for (int i = -TA; i <= TA; i++)
      if (i && PA + i != PC) DFS(PA, PA + i, PC, 0, 0, 0, T);
  if (LiftA && HC)
    for (int i = -TA; i <= TA; i++)
      if (i && PA + i != PB) DFS(PA, PB, PA + i, 0, 0, 0, T);
  if (LiftB && HC)
    for (int i = -TB; i <= TB; i++)
      if (i && PB + i != PA) DFS(PA, PB, PB + i, 0, 0, 0, T);
  if (LiftB && HA)
    for (int i = -TB; i <= TB; i++)
      if (i && PB + i != PC) DFS(PB + i, PB, PC, 0, 0, 0, T);
  if (LiftC && HA)
    for (int i = -TC; i <= TC; i++)
      if (i && PC + i != PB) DFS(PC + i, PB, PC, 0, 0, 0, T);
  if (LiftC && HB)
    for (int i = -TC; i <= TC; i++)
      if (i && PC + i != PA) DFS(PA, PC + i, PC, 0, 0, 0, T);
}
int main() {
  int PA, PB, PC;
  scanf("%d%d%d", &PA, &WA, &TA);
  scanf("%d%d%d", &PB, &WB, &TB);
  scanf("%d%d%d", &PC, &WC, &TC);
  Ans = 0;
  DFS(PA, PB, PC, 0, 0, 0, 0);
  printf("%d\n", Ans);
  return 0;
}
