#include <bits/stdc++.h>
struct B {
  long ge[11];
};
struct A {
  long pe[10];
};
int A(const void *a, const void *b) { return *(int *)b - *(int *)a; }
int main() {
  long p[1024][10];
  long fit[1024], C[100], re, t, n;
  struct A s[100];
  struct B ac[100];
  long i, j, h, z;
  z = 0;
  for (n = 1; n < 1024; n++) {
    h = n;
    for (i = 0; i < 10; i++) {
      t = (9 - i) * (9 - i);
      if (h / t == 1)
        p[n - 1][i] = 1;
      else
        (p[n - 1][i] = 0);
      h %= t;
    }
  }
  scanf("%ld", &h);
  for (i = 0; i < h; i++) {
    for (j = 0; j < 10; j++) {
      scanf("%ld", &s[i].pe[j]);
    }
  }
  for (i = 0; i < h; i++) {
    for (j = 0; j < 11; j++) {
      scanf("%ld", &ac[i].ge[j]);
    }
  }
  for (n = 1; n < 1024; n++) {
    for (i = 0; i < h; i++) {
      C[i] = 0;
    }
    for (i = 0; i < 10; i++) {
      for (j = 0; j < h; j++) {
        if (p[n - 1][i] == 1 && s[j].pe[i] == 1) C[j]++;
      }
    }
    re = 0;
    for (i = 0; i < h; i++) {
      re += ac[i].ge[C[i]];
    }
    fit[n - 1] = re;
  }
  qsort(fit, 1023, sizeof(fit[0]), A);
  printf("%ld", fit[0]);
}
