N,M,K=map(int,input().split()) A=list(map(int,input().split())) T=[list(map(int,input().split())) for i in range(N)] #dp[S][i]=訪れた集合がSで現在iにいるときの時間 dp=[[1000000000 for j in range(N)] for i in range(2**N)] ans=1000000000 #dpテーブル初期化 for i in range(N): dp[2**i][i]=0 for i in range(2**N): for j in range(N): ppc=0 for k in range(N): if (i>>k)&1==1: ppc+=1 if ppc>=M: #景品受け取り for k in range(K): ans=min(ans,dp[i][j]+T[j][A[k]-1]) else: #まだ足りないなら for k in range(N): if (i>>k)&1==0: #まだ訪れていないなら dp[i+2**k][k]=min(dp[i+2**k][k],dp[i][j]+T[j][k]) print(ans) #print(dp)