#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n,lei[25],pos[25],f[25],maxi;
bool mapp[25][25];
void input();
void dp();
void output();
int main(){
memset( mapp, false, sizeof(mapp) );
input();
dp();
output();
return 0;
}
void input(){
scanf("%d",&n);
for( int i=1; i<=n; i++ ){
scanf("%d",&lei[i]);
f[i]=lei[i];
}
int flag;
for( int i=1; i<n; i++ )
for( int j=i+1; j<=n; j++ ){
scanf("%d",&flag);
if( flag ) mapp[i][j]=true;
}
return;
}
void dp(){
for( int i=n; i>0; i-- )
for( int j=i-1; j>0; j-- )
if( mapp[j][i] ){
f[j]=max( f[j], f[i]+lei[j] );
if( f[j]>f[maxi] ){
maxi=j;
}
}
return;
}
void output(){
printf("%d\n",f[maxi]);
return;
}
orz