1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<cmath>
#include<iostream>
#include<string>
using namespace std;
#define F first
#define S second
#define MP make_pair
#define PB push_back
#define LL long long
#define PII pair<int, int>
#define PLL pair<LL, LL>

int n, b, r;
bool R[2][200][200];
bool T[202][202];
char C[202];

int main()
{
	//ios_base::sync_with_stdio(0);
	scanf("%d%d%d", &n, &b, &r);
	for(int i=0; i<n; i++)
	{
		scanf("%s", C);
		for(int j=0; j<n; j++)
			if(C[j]=='1')
				T[i][j]=1;
	}
	for(int i=0; i<r; i++)
	{
		int a;
		scanf("%d", &a);
		R[0][i][a-1]=1;
	}
	int num=300000000/(n*n*r);
	for(int i=0; i<num; i++)
	{
		bool boo=1;
		for(int j=0; j<r; j++)
		{
			for(int k=b; k<n; k++)
			{
				if(R[0][j][k])
				{
					boo=0;
					break;
				}
			}
			if(!boo)
				break;
		}
		if(boo)
		{
			printf("%d\n", i);
			return 0;
		}
		for(int j=0; j<r; j++)
		{
			for(int k=0; k<n; k++)
				R[1][j][k]=0;
			for(int k=0; k<n; k++)
				if(R[0][j][k])
					for(int l=0; l<n; l++)
						R[1][j][l]|=T[k][l];
			for(int k=0; k<n; k++)
				R[0][j][k]=R[1][j][k];
		}
	}
	printf("-1\n");
	return 0;
}