MI=lambda:map(int,input().split()) li=lambda:list(MI()) ii=lambda:int(input()) n,m=li() v=li() s=[input().strip() for _ in range(n)] msk=[0]*n for i in range(n): for j,c in enumerate(s[i]): if c=='o':msk[i]|=1<>j&1:adj[j].append(i) alive=[1]*n t=[0]*m for j in range(m): sm=0 for i in adj[j]:sm+=v[i] t[j]=sm res=0 used=[0]*m for _ in range(m): bj=0;best=-1 for j in range(m): if not used[j] and t[j]>best:best=t[j];bj=j if best<=0:break used[bj]=1 res+=best*best for i in adj[bj]: if alive[i]: alive[i]=0 wi=v[i];mm=msk[i] for j in range(m): if not used[j] and mm>>j&1:t[j]-=wi print(res)