#include using namespace std; const int MX = (1009); int T , n , m , offsal[MX] , minsal[MX] , cap[MX] , is[MX][MX] , good[MX]; char ccc[MX]; int main(){ scanf("%d",&T); while(T--){ scanf("%d %d",&n,&m); for(int j = 1 ; j <= n ; j++) scanf("%d",&minsal[j]); for(int j = 1 ; j <= m ; j++){ scanf("%d %d",&offsal[j],&cap[j]); good[j] = 0; } for(int j = 1 ; j <= n ; j++){ scanf("%s",ccc); for(int i = 1 ; i <= m ; i++) is[j][i] = ccc[i-1] - '0'; } int can = 0 , none = m; long long tot = 0; for(int j = 1 ; j <= n ; j++){ int which = 0; for(int i = 1 ; i <= m ; i++){ if(offsal[i] >= minsal[j] && cap[i] && is[j][i]){ if(offsal[i] > offsal[which]) which = i; } } if(which){ can++; tot += offsal[which]; cap[which]--; if(!good[which]){ good[which] = 1; none--; } } } cout<