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="")