N,M,K=map(int,input().split()) A=list(map(int,input().split())) u=[False]*N for i in range(K): A[i]-=1 u[A[i]]=True dp=[[10**10]*(N) for i in range(2**N)] dist=[list(map(int,input().split())) for i in range(N)] for i in range(N): dp[2**i][i]=0 for bit in range(1,2**N): for j in range(N): if dp[bit][j]>=10**9: continue for k in range(N): if (bit>>k)&1: continue dp[bit+2**k][k]=min(dp[bit+2**k][k],dp[bit][j]+dist[j][k]) result=10**10 for bit in range(1,2**N): c=0 for k in range(N): if (bit>>k)&1: c+=1 if c>=M: for j in range(N): if u[j]==True: result=min(result,dp[bit][j]) print(result)