import copy


# 获取可能的组合
def get_list(lst):
    def b(start, path):
        if path:
            result.append(path)
        for i in range(start, len(lst)):
            b(i + 1, path + [lst[i]])

    result = []
    b(0, [])
    return result


# 判断是否可行
def check(lst):
    for i in range(n):
        for j in range(m):
            if lst[i][j] == 0:
                return False
    return True


n, m, q = map(int, input().split())

c = []
# 草地
for i in range(n):
    c.append([int(i) for i in input()])

# 方案
my_dict = {}
for k in range(q):
    my_dict[k] = []
    for i in range(n):
        my_dict[k].append([int(i) for i in input()])

if check(c):
    print(0)
else:
    # 筛选出可行的方案
    l = []
    for k in range(q):
        flag = False  # 判断方案是否可行
        for i in range(n):
            for j in range(m):
                if my_dict[k][i][j] + c[i][j] > 1:
                    flag = True
                    break
            if flag:
                break
        if not flag:
            l.append(k)

    lll = {}
    cc = 0
    # 计算每种组合是否合规
    for ll in get_list(l):
        c1 = copy.deepcopy(c)
        for k in ll:
            for i in range(n):
                for j in range(m):
                    c1[i][j] += my_dict[k][i][j]
        if check(c1):
            lll[cc] = {"len": len(ll), "ll": ll}
            cc += 1

    sorted_lll = sorted(lll.values(), key=lambda x: x["len"])
    if len(lll) == 0:
        print(-1)
    else:
        print(sorted_lll[0]["len"])
        print(" ".join([str(i + 1) for i in sorted_lll[0]["ll"]]))