n,m,q=list(map(int,input().split())) grass=[] plan=[] for i in range(n): row=[] for j in input(): row.append(int(j)) grass.append(row) for i in range(q): p1=[] for j in range(n): row = [] for j in input(): row.append(int(j)) p1.append(row) plan.append(p1) def combinePlan(a,b): cplan=[[0]*m for _ in range(n)] for i in range(n): for j in range(m): s1=a[i][j]+b[i][j] if s1>=1: cplan[i][j]=1 else: cplan[i][j]=0 return cplan def planOK(p): for i in range(n): for j in range(m): s1=grass[i][j]+p[i][j] if s1==1: continue elif s1>=2: return -1 else: return 0 return 1 L=[] def dfs(plist,plans,out): if planOK(plans)==1: L.append(out) return True elif planOK(plans)==-1: return False for i in range(len(plist)): dfs(plist[:i]+plist[i+1:],combinePlan(plans,plan[plist[i]]),out+[plist[i]]) black=[[0]*m for _ in range(n)] dfs([i for i in range(q)],black,[]) minL=8 bestP=[0] for i in L: if len(i)<minL: minL=len(i) bestP=i if minL==8: print(-1) else: print(minL) for i in range(minL): if i==minL: print("%d"%(bestP[i]+1)) else: print("%d "%(bestP[i]+1),end="")