using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;


public class C
{
	public static void Main()
	{
		int N = Int32.Parse(Console.ReadLine());
		
		string[] args;
		int[] F = new int[N];
		for(int i = 0; i < N; i++)
		{
			args = Console.ReadLine().Split(' ');
			for(int j = 0; j < 5; j++)
			{
				for(int k = 0; k < 2; k++)
				{
					int term = 2 * j + k;
					F[i] |= (Int32.Parse(args[term]) << term);
				}
			}
		}

		int[,] P = new int[N,10];
		for(int i = 0; i < N; i++)
		{
			args = Console.ReadLine().Split(' ');
			for(int j = 0; j < 10; j++)
			{
				P[i,j] = Int32.Parse(args[j]);
			}
		}

		int ans = Int32.MinValue;
		for(int mask = 1; mask < (1 << 10); mask++)
		{
			int tmp = 0;
			for(int i = 0; i < N; i++)
			{
				int num = (int)popcount((ulong)(mask & F[i]));
				tmp += P[i,num];
			}
			ans = Math.Max(ans, tmp);
		}

		Console.WriteLine(ans);		
	}

	private static ulong popcount(ulong x)
	{
		ulong c = 0;
    	c = (x & 0x5555555555555555) + ((x>>1) & 0x5555555555555555);
    	c = (c & 0x3333333333333333) + ((c>>2) & 0x3333333333333333);
    	c = (c & 0x0f0f0f0f0f0f0f0f) + ((c>>4) & 0x0f0f0f0f0f0f0f0f);
    	c = (c & 0x00ff00ff00ff00ff) + ((c>>8) & 0x00ff00ff00ff00ff);
    	c = (c & 0x0000ffff0000ffff) + ((c>>16) & 0x0000ffff0000ffff);
    	c = (c & 0x00000000ffffffff) + ((c>>32) & 0x00000000ffffffff);
    	return(c);
	}
}



