#include <bits/stdc++.h>
using namespace std;
long long int mod(long long int a, long long int mod) {
  long long int res = a % mod;
  if (res < 0) res = res + mod;
  return res;
}
long long int modpow(long long int a, long long int n, long long int mod) {
  long long int res = 1;
  while (n > 0) {
    if (n & 1) res = res * a % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return res;
}
long long int modinv(long long int a, long long int mod) {
  return modpow(a, mod - 2, mod);
}
bool is_prime(long long int n) {
  long long int i = 2;
  if (n == 1) return false;
  if (n == 2) return true;
  bool res = true;
  while (i * i < n) {
    if (n % i == 0) {
      res = false;
    }
    i = i + 1;
  }
  if (n % i == 0) res = false;
  return res;
}
long long int P[101][11];
long long int F[101][11];
int N;
int main() {
  cin >> N;
  for (int i = 0; i < (N); i++) {
    for (int j = 0; j < (10); j++) {
      cin >> F[i][j];
    }
  }
  for (int i = 0; i < (N); i++) {
    for (int j = 0; j < (11); j++) {
      cin >> P[i][j];
    }
  }
  long long int ans = -1e15;
  for (int i = 1; i <= pow(2, 10); i++) {
    vector<int> count(N, 0);
    for (int j = 0; j < (10); j++) {
      if (i >> j & 1) {
        for (int k = 0; k < (N); k++) {
          if (F[k][j] == 1) {
            count[k]++;
          }
        }
      }
    }
    long long int tmp = 0;
    for (int k = 0; k < (N); k++) {
      tmp = tmp + P[k][count[k]];
    }
    ans = max(ans, tmp);
  }
  cout << ans;
  return 0;
}
