/*
TASK: expres
LANG C++
*/

#include <stdio.h>

int T[40][40][40];
int P[40][40][40];
int N,K;
int expr[45];
int c[10][10],b[10][10];
char S[6][250];

struct digit
{ int a[6][4]; } m[11];

void init()
{ m[0].a[1][1]=1; m[0].a[1][2]=1; m[0].a[1][3]=1;
  m[0].a[2][1]=1; m[0].a[2][2]=0; m[0].a[2][3]=1;
  m[0].a[3][1]=1; m[0].a[3][2]=0; m[0].a[3][3]=1;
  m[0].a[4][1]=1; m[0].a[4][2]=0; m[0].a[4][3]=1;
  m[0].a[5][1]=1; m[0].a[5][2]=1; m[0].a[5][3]=1;

  m[1].a[1][1]=0; m[1].a[1][2]=0; m[1].a[1][3]=1;
  m[1].a[2][1]=0; m[1].a[2][2]=0; m[1].a[2][3]=1;
  m[1].a[3][1]=0; m[1].a[3][2]=0; m[1].a[3][3]=1;
  m[1].a[4][1]=0; m[1].a[4][2]=0; m[1].a[4][3]=1;
  m[1].a[5][1]=0; m[1].a[5][2]=0; m[1].a[5][3]=1;

  m[2].a[1][1]=1; m[2].a[1][2]=1; m[2].a[1][3]=1;
  m[2].a[2][1]=0; m[2].a[2][2]=0; m[2].a[2][3]=1;
  m[2].a[3][1]=1; m[2].a[3][2]=1; m[2].a[3][3]=1;
  m[2].a[4][1]=1; m[2].a[4][2]=0; m[2].a[4][3]=0;
  m[2].a[5][1]=1; m[2].a[5][2]=1; m[2].a[5][3]=1;

  m[3].a[1][1]=1; m[3].a[1][2]=1; m[3].a[1][3]=1;
  m[3].a[2][1]=0; m[3].a[2][2]=0; m[3].a[2][3]=1;
  m[3].a[3][1]=1; m[3].a[3][2]=1; m[3].a[3][3]=1;
  m[3].a[4][1]=0; m[3].a[4][2]=0; m[3].a[4][3]=1;
  m[3].a[5][1]=1; m[3].a[5][2]=1; m[3].a[5][3]=1;

  m[4].a[1][1]=1; m[4].a[1][2]=0; m[4].a[1][3]=1;
  m[4].a[2][1]=1; m[4].a[2][2]=0; m[4].a[2][3]=1;
  m[4].a[3][1]=1; m[4].a[3][2]=1; m[4].a[3][3]=1;
  m[4].a[4][1]=0; m[4].a[4][2]=0; m[4].a[4][3]=1;
  m[4].a[5][1]=0; m[4].a[5][2]=0; m[4].a[5][3]=1;

  m[5].a[1][1]=1; m[5].a[1][2]=1; m[5].a[1][3]=1;
  m[5].a[2][1]=1; m[5].a[2][2]=0; m[5].a[2][3]=0;
  m[5].a[3][1]=1; m[5].a[3][2]=1; m[5].a[3][3]=1;
  m[5].a[4][1]=0; m[5].a[4][2]=0; m[5].a[4][3]=1;
  m[5].a[5][1]=1; m[5].a[5][2]=1; m[5].a[5][3]=1;

  m[6].a[1][1]=1; m[6].a[1][2]=1; m[6].a[1][3]=1;
  m[6].a[2][1]=1; m[6].a[2][2]=0; m[6].a[2][3]=0;
  m[6].a[3][1]=1; m[6].a[3][2]=1; m[6].a[3][3]=1;
  m[6].a[4][1]=1; m[6].a[4][2]=0; m[6].a[4][3]=1;
  m[6].a[5][1]=1; m[6].a[5][2]=1; m[6].a[5][3]=1;

  m[7].a[1][1]=1; m[7].a[1][2]=1; m[7].a[1][3]=1;
  m[7].a[2][1]=0; m[7].a[2][2]=0; m[7].a[2][3]=1;
  m[7].a[3][1]=0; m[7].a[3][2]=0; m[7].a[3][3]=1;
  m[7].a[4][1]=0; m[7].a[4][2]=0; m[7].a[4][3]=1;
  m[7].a[5][1]=0; m[7].a[5][2]=0; m[7].a[5][3]=1;

  m[8].a[1][1]=1; m[8].a[1][2]=1; m[8].a[1][3]=1;
  m[8].a[2][1]=1; m[8].a[2][2]=0; m[8].a[2][3]=1;
  m[8].a[3][1]=1; m[8].a[3][2]=1; m[8].a[3][3]=1;
  m[8].a[4][1]=1; m[8].a[4][2]=0; m[8].a[4][3]=1;
  m[8].a[5][1]=1; m[8].a[1][2]=1; m[8].a[1][3]=1;

  m[9].a[1][1]=1; m[9].a[1][2]=1; m[9].a[1][3]=1;
  m[9].a[2][1]=1; m[9].a[2][2]=0; m[9].a[2][3]=1;
  m[9].a[3][1]=1; m[9].a[3][2]=1; m[9].a[3][3]=1;
  m[9].a[4][1]=0; m[9].a[4][2]=0; m[9].a[4][3]=1;
  m[9].a[5][1]=1; m[9].a[1][2]=1; m[9].a[1][3]=1;


}
  
void cmp (int d1,int d2)
{ int br1=0; int br2=0;
  int i,j;
  for (i=1;i<=5;i++)
    for (j=1;j<=3;j++)
      // if (m[d1].a[i][j]!=m[d2].a[i][j])
          if ((m[d1].a[i][j]==1)&&(m[d2].a[i][j]==0)) br1++;
            else if ((m[d1].a[i][j]==0)&&(m[d2].a[i][j]==1)) br2++;
  b[d1][d2]=br1+br2;
  b[d2][d1]=b[d1][d2];
  c[d1][d2]=br1;
  c[d2][d1]=br2;
}

void digits ()
{ init();
  int i,j;
  for (i=0;i<=9;i++)
    for (j=0;j<=9;j++)
      cmp(i,j);
}

int abs (int dg)
{ if (dg<0) return -dg;
  return dg;
}

void solve ()
{ int i,j,k,l,pr,pr1;
  int lmp=0,rez;
  for (i=1;i<=35;i++)
    for (j=0;j<=35;j++)
      for (k=0;k<=35;k++)
        T[i][j][k]=-10000;

  for (i=1;i<=N;i++)
    T[i][0][0]=expr[i]+T[i-1][0][0];
  for (i=1;i<=N;i++)
       { int num=abs(expr[i]);
         if (expr[i]<0) lmp=1;
     //    if (i!=1)
     //    for (j=0;j<=K;j++)
     //      for (k=0;k<=K;k++)
              T[i][j][k]=T[i-1][j][k];
         for (j=0;j<=9;j++)
           { pr=b[num][j];
             pr1=c[num][j];
             for (k=0;k<=K;k++)
               for (l=0;l<=k;l++)
                 { rez=T[i-1][k][l]+j;
                   if (lmp)  rez-=2*j;
                   if (T[i][k+pr][l+pr1]<rez)
                       T[i][k+pr][l+pr1]=rez;
                   if (lmp)
                      { rez=T[i-1][k][l]+j;
                        if (T[i][k+pr+2][l+pr1]<rez)
                            T[i][k+pr+2][l+pr1]=rez; }
                   else
                      { rez=T[i-1][k][l]-j;
                        if (T[i][k+pr+2][l+pr1+2]<rez)
                            T[i][k+pr+2][l+pr1+2]=rez;
                       }
                 }
           }
         lmp=0;
        }
}

int cmp2(int d1,int ind)
{ int i,j;
  for (i=1;i<=5;i++)
    for (j=1;j<=3;j++)
      if (m[d1].a[i][j]!=(S[i][ind+j-1]-'0')) return 0;
  return 1;
}

int sign (int ind)
{ if (S[2][ind+1]=='0') return 1;
  return 0;
}


void vhod()
{//char S[6][250];
  int i,j,k,l,ci=0;
  for (i=1;i<=5;i++)
    scanf("%s",S[i]);
  for (i=0;i<=9;i++)
 if (cmp2(i,0)) expr[1]=i;
  ci=3;
  for (k=2;k<=N;k++)
    { l=sign(ci);
      ci+=3;
      for (j=0;j<=9;j++)
        if (cmp2(j,ci))
           { expr[k]=j;
             if (l) expr[k]-=2*j;
             ci+=3;
             break;
           }
    }
}

int main ()
{ digits();
  int i,j,max=0;
  scanf("%d%d",&N,&K);
  vhod();
  //for (i=1;i<=N;i++)
    //scanf("%d",&expr[i]);
  solve();
  for (j=0;j<=K;j+=2)
    if (max<T[N][j][j/2]) max=T[N][j][j/2];
  printf("%d\n",max);
  return 0;
}

