#include <bits/stdc++.h>

using namespace std ;

const int MAX = 3000 + 10 ;

int arr[MAX][5] ;
int freq[40] ;
int n ;

bool check(int x)
{
	memset(freq , 0 , sizeof(freq)) ;
	for(int i = 0 ; i < n ; ++i)
	{
		int mask = 0 ; 
		for(int j = 0 ; j < 5 ; ++j)
		{
			if(arr[i][j] >= x)
				mask += (1 << j) ;
		}
		freq[mask]++ ;
	}
	for(int mask1 = 0 ; mask1 < 32 ; ++mask1)
	{
		if(!freq[mask1])
			continue ;
		for(int mask2 = 0 ; mask2 < 32 ; ++mask2)
		{
			if(!freq[mask2])
				continue ;
			for(int mask3 = 0 ; mask3 < 32 ; ++mask3)
			{
				if(!freq[mask3])
					continue ;
				int mask = (mask1 | mask2 | mask3) ;
				if(mask == 31)
					return true ;
			}
		}
	}
	return false ;
}

int main()
{
	ios_base::sync_with_stdio(0) ;
	cin.tie(0) ;
	cin>>n ;
	for(int i = 0 ; i < n ; ++i)
	{
		for(int j = 0 ; j < 5 ; ++j)
			cin>>arr[i][j] ;
	}
	int l = 0 , r = 1e9 ;
	int ans = 0 ;
	while(l <= r)
	{
		int mid = (l + r) >> 1 ;
		if(check(mid))
			ans = mid , l = mid+1 ;
		else
			r = mid-1 ;
	}
	return cout<<ans<<"\n" , 0 ; 
}		
#include <bits/stdc++.h>
#include<math.h>
#include<queue>
#include<cstdio>
#include<set>
#include<map>
using namespace std;
using ll = long long;

int main(){
    ll N;
    cin>>N;
    vector<ll> A(N+1,0),B(N+1,0),MB(N+1,0),C(N,0);
    ll ans=0;
    for(ll i=1; i<=N; i++){
        cin >> A.at(i);
    }
    for(ll i=1; i<=N; i++){
        B.at(i)=B.at(i-1)+A.at(i);
        if(B.at(i)>MB.at(i-1)) MB.at(i)=B.at(i);
        else MB.at(i)=MB.at(i-1);
    }
    for(ll i=1; i<N; i++){
        C.at(i)=C.at(i-1)+B.at(i);
        if(C.at(i)+MB.at(i+1)>ans){
          ans=C.at(i)+MB.at(i+1);
        }
    }
  	if(N==1 && A.at(1)>0) ans=A.at(1); 
    cout << ans << endl;
    return 0;
}