#include<iostream>
using namespace std;
int n;
int maxx[21][21];
int lie[21];
int aa[21];
int ans;
void dfs(int x,int sum)
{
if(x>n)
{
ans=max(ans,sum);
return;
}
int vv=0;
for(int p=x;p<=n;p++)
{
vv+=aa[p];
}
if(sum+vv<ans) return;
for(int i=1;i<=n;i++)
{
if(lie[i]==0)
{
lie[i]=1;
sum+=maxx[x][i];
x++;
dfs(x,sum);
x--;
lie[i]=0;
sum-=maxx[x][i];
}
}
}
void print()
{
cout<<endl;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cout<<maxx[i][j]<<" ";
}
cout<<endl;
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>maxx[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
int qwe;
cin>>qwe;
maxx[j][i]*=qwe;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
aa[i]=max(aa[i],maxx[i][j]);
}
}
//print();
dfs(1,0);
cout<<ans;
return 0;
}