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