#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define up(i,j,k,l) for(int i=j;i<=k;i+=l)
#define down(i,j,k,l) for(int i=j;i>=k;i-=l)
using namespace std;
const int N=1e2+10;
int n,m;
int a[N],f[N];
string s[N];
int ans[N],ca;
int t,ct,maxf,d;
int pd;
bool cmp(int x1,int x2)
{
return x1>x2;
}
void solve()
{
cin>>n>>m;
up(i,1,m,1){
cin>>a[i];
}
up(i,1,n,1){
up(j,1,m,1){
cin>>s[i][j];
if(s[i][j]=='o'){
f[i]+=a[j];
}
}
}
up(i,1,n,1){
f[i]+=i;
maxf=max(maxf,f[i]);
}
up(i,1,n,1){
if(f[i]==maxf){
pd++;
break;
}
}
up(i,1,n,1){
if(f[i]==maxf && pd>=2){
cout<<1<<endl;
continue;
}
else if(f[i]==maxf && pd==1){
cout<<0<<endl;
continue;
}
up(j,0,N-2,1){
ans[i]=0;
}
ca=0;
up(j,1,m,1){
if(s[i][j]=='x'){
ca++;
ans[ca]=a[j];
}
}
sort(ans+1,ans+ca+1,cmp);
ct=maxf;
t=f[i];
int ctt=ca;
ca=0;
d=0;
while(t<=ct && (f[i]!=maxf || pd==true) && ca<=ctt){
ca++;
t+=ans[ca];
d++;
}
cout<<d<<endl;
}
return;
}
int main()
{
freopen("champion.in","r",stdin);
freopen("champion.out","w",stdout);
int _=1;
up(i,1,_,1){
solve();
}
return 0;
}