#include long long int min(long long int a, long long int b) { if (a < b) return a; else return b; } long long int popcount(long long int n) { long long int res = 0; for (; n > 0; n /= 2) res += n % 2; return res; } long long int a[8]; long long int t[16][16]; long long int dist[70004][16]; int main() { long long int n, m, k; scanf("%lld %lld %lld", &n, &m, &k); long long int i, j; for (i = 0; i < k; i++) { scanf("%lld", &a[i]); a[i]--; } for (i = 0; i < n; i++) for (j = 0; j < n; j++) scanf("%lld", &t[i][j]); for (i = 0; i < (1 << n); i++) for (j = 0; j < n; j++) dist[i][j] = 1e18; for (i = 0; i < n; i++) dist[1 << i][i] = 0; long long int s; for (s = 1; s < (1 << n); s++) for (i = 0; i < n; i++) for (j = 0; j < n; j++) dist[s | (1 << j)][j] = min(dist[s | (1 << j)][j], dist[s][i] + t[i][j]); long long int ans = 1e18; for (i = 0; i < k; i++) for (s = 0; s < (1 << n); s++) if (popcount(s) >= m) ans = min(ans, dist[s][a[i]]); printf("%lld\n", ans); return 0; }