#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct P
{
    long mon[11];
};
struct S
{
    long per[10];
};
int C(const void *a,const void *b)
{
    return *(int*)b-*(int*)a;
}
int main()
{
    long pro[1024],k,time[100],result,t;
    long p[1024][10];
    struct S A[100];
    struct P B[100];
    short n;

    short i,j;
    for(n=1;n<1024;n++)
    {
        k=n;
        for(i=0;i<10;i++)
        {
            t=pow(2,9-i);
            if(k/t==1)
                p[n-1][i]=1;
            else
                p[n-1][i]=0;
            k%=t;
        }
    }
    scanf("%ld",&k);
    for(i=0;i<k;i++)
    {
        for(j=0;j<11;j++)
        {
            scanf("%ld",&B[i].mon[j]);
        }
    }
    for(i=0;i<k;i++)
    {
        for(j=0;j<10;j++)
        {
            scanf("%ld",&A[i].per[j]);
        }
    }
    
    for(n=1;n<1024;n++)
    {
        for(i=0;i<k;i++)
        {
            time[i]=0;
        }
        for(i=0;i<10;i++)
        {
            for(j=0;j<k;j++)
            {
                if(A[j].per[i]==1&&p[n-1][i]==1)
                    time[j]++;
            }
        }
        result=0;
        for(i=0;i<k;i++)
        {
            result+=B[i].mon[time[i]];
        }
        pro[n-1]=result;
    }
    qsort(pro,1023,sizeof(pro[0]),C);
    printf("%ld",pro[0]);
    return 0;
    
}