#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iomanip>
#include <queue>
#include <sstream>
#include <climits>
#include <cmath>
#include <list>
#include <functional>
#include <map>
#include <stack>
using namespace std;
#define M_PI 3.141592
#define FOR(i,n) for(int i=0;i<(int)n;i++)
#define FORI(i,k,n) for(int i=k;i<(int)n;i++)
#define toRad 2.0*M_PI/360.0
#define inin(x) int x;cin>>x;
#define all(x) x.begin(),x.end()
#define debug(x) cout<<#x<<" :"<<x<<endl;
#define rep(i,n) for(int i=0;i<(int)n;i++)
#define EPS 1e-12
#define pri_max 60000
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
typedef vector<int> vi;
int dx[4] = { 0,1,0,-1 };
int dy[4] = { 1,0,-1,0 };

/*
bool memo[pri_max] = {};
vector<int> pri;
void calc()
{
	for (int i = 2; i < pri_max; i++)
	{
		if (memo[i] == false)
		{
			pri.push_back(i);
			for (int l = i; l < pri_max; l += i)
			{
				memo[l] = true;
			}
		}
	}
}*/
double len(pdd a, pdd b)
{
	return sqrt((b.first - a.first)*(b.first - a.first) + (b.second - a.second)*(b.second - a.second));
}
vector<int> m[200];

int main()
{
	vector<vi> v;
	string s;
	while (getline(cin, s))
	{
		stringstream ss(s);
		vi sv;
		while (getline(ss, s, ','))
		{
			sv.push_back(s[0] - '0');
		}
		v.push_back(sv);
	}

	int h = (v.size() + 1) / 2;
	for (int i = 0; i < 200; i++)m[0].push_back(0);
	for (int i = 1; i <= h; i++)
	{
		m[i].push_back(0);
		for (int l = i; l < i+5; l++)
		{
			m[i].push_back(v[l-1].back());
			v[l-1].pop_back();
		}
		for (int l = 0; l < 200; l++)m[i].push_back(0);
	}
	for (int i = h + 1; i < 200; i++)
	{
		for (int l = 0; l < 200; l++)
		{
			m[i].push_back(0);
		}
	}
	
	for (int i = 0; i < 200; i++)
	{
		for (int l = 0; l < m[i].size(); l++)
		{
			cout << m[i][l];
		}
		cout << endl;
	}
	
	
	for (int i = 2; i < 2*h+1; i++)
	{
		for (int l = i,k=1; l >= 1; l--,k++)
		{
			m[l][k] = max(m[l][k] + m[l][k - 1], m[l][k] + m[l - 1][k]);
		}
	}
	cout << m[h][h] << endl;

}