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