#include <iostream>
#include <cstdint>
#include <vector>
using namespace std;
// 移位时,立即数默认是32位,一定要指定为64位
bool invalid = true;
vector<int> pickMin;
void Dfs(vector<int>& pick, uint64_t val, vector<uint64_t>& flags, int i, uint64_t stdFlag) {
if(val == stdFlag) {
if(pick.size() < pickMin.size()) {
pickMin = pick;
invalid = false;
}
return;
}
if(i == flags.size()) {
return;
}
pick.push_back(i);
Dfs(pick, val | flags[i], flags, i+1, stdFlag);
pick.pop_back();
Dfs(pick, val, flags, i+1, stdFlag);
}
int main() {
int n, m, q;
cin >> n >> m >> q;
uint64_t stdFlag = 0;
for(auto i = 0; i < n;i++) {
string str;
cin >> str;
for(auto j = 0; j < m; j++) {
if(str[j] == '0') {
// 立即数默认是32位,一定要指定为64位
stdFlag |= uint64_t(1)<< (i*m + j);
}
}
}
vector<uint64_t> flags(q);
for(auto k = 0; k < q; k++) {
uint64_t& flag = flags[k];
for(auto i = 0; i < n;i++) {
string str;
cin >> str;
for(auto j = 0; j < m; j++) {
if(str[j] == '1') {
flag |= uint64_t(1)<< (i*m + j);
}
}
}
}
vector<int> pick;
pickMin.assign(q+1,0);
Dfs(pick, 0, flags, 0, stdFlag);
if(invalid) {
cout << -1 << endl;
} else {
cout << pickMin.size() << endl;
auto first = true;
for(auto v : pickMin) {
if(!first) {
cout << " ";
}
first = false;
cout << v + 1;
}
cout << endl;
}
}
// 64 位输出请用 printf("%lld")