import sys

def merge(fire,plan):#实施计划
    for i in range(len(fire)):
        fire[i] = fire[i] | plan[i]

def checkok(grass,plan):#检查计划是否可行
    for i in range(len(grass)):
        if grass[i] & plan[i]:
            return False
    else:
        return True

def isfull(grass,fire,m):#检查是否所有空草地都有烟花燃放
    for i in range(len(grass)):
        s = bin(grass[i] | fire[i])[2:]
        if s != '1'*m:
            return False
    return True
        
def way(grass,fire,plans,used,q,m,k):
    if isfull(grass,fire,m):
        if sum(used) > k:#如果使用计划数超过限制就不行
            return []
        else:
            return used#否则返回计划使用情况
    elif not plans:#如果草坪没满,但计划都不行就返回空列表
        return []
    plan = plans.pop(0)
    temp = way(grass,fire[:],plans[:],used[:],q,m,k)#如果不使用本计划的情况
    if temp:
        return temp
    if checkok(grass,plan):#如果本计划可行,则使用本计划
        used[q-len(plans)-1] = 1
        merge(fire,plan)
        temp = way(grass,fire[:],plans[:],used[:],q,m,k)
        if temp:
            return temp
      
while True:
    try:
        n,m,q = map(int,input().split())
        grass = []#草坪杂物分布
        plans = []#燃放计划
        for _ in range(n):
            grass.append(int(input(),2))
        for _ in range(q):
            temp = []
            for _ in range(n):
                temp.append(int(input(),2))
            plans.append(temp)
        fire = [0]*n#已经燃放烟花的位置
        used = [0]*q#计划实施情况
        for k in range(1,q+1):#限制燃放计划数,保证总计划数最小
            out = way(grass,fire[:],plans[:],used[:],q,m,k)
            if out:
                print(sum(out))
                lst = [i + 1 for i in range(q) if out[i]]
                print(' '.join(map(str,lst)))
                break
        else:
            print('-1')
            
    except:
        break