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