#include <bits/stdc++.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
#define pb push_back
#define mp make_pair
#define INF 1e18
#define mod 1000000007
#define eps 1e-6
#define abs(x) ((x)>=0?(x):-(x))
#define y1 solai
#define fi first
#define se second
typedef long long ll;
void read(ll &x)
{
	scanf("%lld",&x);
}
void read(ll &x, ll &y)
{
	scanf("%lld%lld",&x,&y);
}
void read(ll &x, ll &y, ll &z)
{
	scanf("%lld%lld%lld",&x,&y,&z);
}
void print(ll x)
{
	printf("%lld ",x);
}
void println(ll x)
{
	printf("%lld\n",x);
}
const ll N=100;
ll n,q,a[N+10],b[10][N+10],d[20][1<<19],sum[10],ch,ans,len;
char st[111111];
int main()
{
	//freopen("c.cpp","r",stdin);
 
 	cin>>n>>q;
 	for(ll i=0;i<n;i++)
 		read(a[i]);
 	for(ll i=0;i<n;i++)
 	{
 		scanf("\n%s",st);
 		len=strlen(st);
 		for(ll j=0;j<len;j++)
 			b[st[j]-48][i]++;
 	}
 	for(ll i=0;i<n;i++)
 	{
 		ch=1;
 		for(ll j=0;j<10;j++)
 			if(b[j][i]>q)
 				ch=0;
 		if(!ch)
 			continue;
 		d[i][1<<i]=a[i];
 		ans=max(ans,a[i]);
 	}
 	for(ll i=0;i<(1<<n);i++)
 	{
 		for(ll j=0;j<10;j++)
 			sum[j]=0;
 		for(ll j=0;j<n;j++)
 			if((i>>j)&1)
	 			for(ll k=0;k<10;k++)
	 				sum[k]+=b[k][j];
 		ch=1;
 		for(ll j=0;j<10;j++)
 			if(sum[j]>q)
 				ch=0;
 		if(!ch)
 			continue;
 		for(ll j=0;j<n;j++)
 			if((i>>j)&1)
 			{
 				for(ll k=0;k<n;k++)
 					if(k!=j&&((i>>k)&1))
 						d[j][i]=max(d[j][i],d[k][i^(1<<j)]+(a[j]^a[k])),
 						ans=max(ans,d[j][i]);
 			}
 	}
 	cout<<ans;
}