import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
//用回溯+剪枝的方式遍历所有可能性,并在递归过程中维护最优解
//棋盘数据和计划都用一个long数据存放方便位运算,每一格棋盘就是二进制的一位
public class Main {
    static int size;//空格数量
    static int bastSelect;//最优选择,如4个计划选择1和3时,则是二进制1010
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) { 
            int n=in.nextInt();
            int m=in.nextInt();
            int q=in.nextInt();
            size=n*m;
            bastSelect=-1;//初始-1会将所有为置为1,相当于默认最大值
            in.nextLine();
		  //初始化草地,用二进制每一位代表一个格子
            long board=0L;
            for(int i=0;i<n;i++){
                board<<=m;
                board|=Integer.valueOf(in.nextLine(),2);
            }
		  //初始化所以计划,同样每个计划二进制存放
            long[] plan=new long[q];
            for(int i=0;i<q;i++){
                long temp=0L;
                for(int j=0;j<n;j++){
                    temp<<=m;//空出m位存放下一行数据
                    temp|=Integer.valueOf(in.nextLine(),2);
                }
                plan[i]=temp;
            }
            backtrack(0,plan,board,0,board);
            if(bastSelect==-1){
			  //未修改最优选择则表示所有计划无法覆盖题目要求
                System.out.println(-1);
            }else{
                System.out.println(Integer.bitCount(bastSelect));
                int idx=1;
                while(bastSelect>0){
                    if((bastSelect&1)==1){
                        System.out.print(idx+" ");
                    }
                    bastSelect>>=1;
                    idx++;
                }
            }    
        }
    }
  //idx:plan的索引
  //plan:计划集合
  //cur:二进制存储当前棋盘情况,0的位置表示闲置需要放烟花,1的位置表示已经放了杂物或者烟花
  //select:存储已选择计划情况
  //board:杂物位置
    public static void backtrack(int idx,long[] plan,long cur,int select,long board){
	  //1L<<(size))-1表示当前棋盘长度的二进制串,全是1则表示cur已放满烟花
        if(cur==(1L<<(size))-1){
            bastSelect=select;
            return;
        }
        if(idx==plan.length)return;
	  //提前剪枝,当前select计划数等于或者超过最优则无需继续计算
        if(Integer.bitCount(select)>=Integer.bitCount(bastSelect))return;
        //idx计划的烟花放到了杂物位置,不合要求所以直接跳过该计划
        if((plan[idx]&board)!=0){
            backtrack(idx+1,plan,cur,select,board);
            return;
        }
        //选择idx计划
        backtrack(idx+1,plan,cur|plan[idx],select|(1<<idx),board);

        //不选idx计划
        backtrack(idx+1,plan,cur,select,board);
    }
}