void main(){
  import std.stdio, std.string, std.conv, std.algorithm;

  int n; rd(n);
  auto a=new int[][](n, 10);
  foreach(i; 0..n) a[i]=readln.split.to!(int[]);
  auto c=new int[][](n, 11);
  foreach(i; 0..n) c[i]=readln.split.to!(int[]);

  long sum=-10000000000;
  for(int bit=1; bit<(1<<10); bit++){
    auto cnt=new int[](n);
    foreach(j; 0..10)if(bit&(1<<j)){
      foreach(i; 0..n)if(a[i][j]) cnt[i]++;
    }
    long s=0;
    foreach(i; 0..n) s+=c[i][cnt[i]];
    sum=max(sum, s);
  }
  
  writeln(sum);
}


void rd(T...)(ref T x){
  import std.stdio, std.string, std.conv;
  auto l=readln.split;
  assert(l.length==x.length);
  foreach(i, ref e; x){
    e=l[i].to!(typeof(e));
  }
}