"""
# 標準入力取得
## 文字列
 = sys.stdin.readline().rstrip()
 = list(sys.stdin.readline().rstrip())

## 数値
 = int(sys.stdin.readline())
 = map(int, sys.stdin.readline().split())
 = list(map(int, sys.stdin.readline().split()))
 = [list(map(int,list(sys.stdin.readline().split()))) for i in range(h)]  # 二次元配列入力　二次元マップみたいな入力のとき

# 0埋め, 小数点出力桁指定時のときの出力
a = 100
b = 0.987654321
print("{0:06d}-{1:6f}".format(a,b))
000100-0.987654

# 文字列をリストに格納
char_list = list("abcd") # ["a","b","c","d"]
"""

import math
import sys
import itertools
import queue
from fractions import gcd

def lcm(a, b):
    return a * b // gcd(a, b)

mod = 1000000007

if __name__ == "__main__":
    n = int(sys.stdin.readline())
    f = [list(map(int,list(sys.stdin.readline().split()))) for i in range(n)]  # 二次元配列入力　二次元マップみたいな入力のとき
    p = [list(map(int,list(sys.stdin.readline().split()))) for i in range(n)]  # 二次元配列入力　二次元マップみたいな入力のとき
    
    ans = -999999999
    #集合に含まれる部分集合全パターンだけループ
    for item in range(1,2**10):#試行回数（10個の時間帯で店開く開かないを考える）
        fund = 0
        #被る被らない
        for i in range(n):#n個のお店
            cou = 0#カウンタ。利益を表す。
            for x in range(10):#月-金(5) * 2
                if (item >> x) % 2 == 1 and f[i][x] == 1:#itemを右にx回ビットシフト(/2)させてお店iとともに奇数＝被っていたら
                    cou += 1#店を開けるのが被っていたらカウンタを更新
            fund += p[i][cou]#お店iにおけるカウンタ分の時間帯の利益を足す。
        ans = max(ans, fund)#最大問題なので大きくなれば更新
    print(ans)