package timus;
import java.util.*;
/**
* Created by sherxon on 2016-11-24.
*/
public class ElectrificationPlan1982 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String[] f=in.nextLine().split(" ");
int n = Integer.parseInt(f[0]);
int k = Integer.parseInt(f[1]);
Set<Integer> cities = new HashSet<>(k);
String[] s=in.nextLine().split(" ");
for (int i = 0; i < s.length; i++) {
cities.add(Integer.parseInt(s[i]));
}
EGraph graph= new EGraph();
for (int i = 1; i <=n; i++) {
graph.addVertex(i, cities.contains(i));
}
String[] a;
for (int i = 0; i < n; i++) {
a=in.nextLine().split(" ");
for (int j = i+1; j <a.length ; j++) {
graph.addEdge(i+1, j+1, Integer.parseInt(a[j]));
}
}
System.out.println(graph.mst());
}
private static class EGraph {
public int mst(){
List<Integer> unvisited= new ArrayList<>(map.keySet());
Integer vertex=unvisited.get(0);
unvisited.remove(vertex);
PriorityQueue<VE> queue=new PriorityQueue<>();
while (!unvisited.isEmpty()){
VE v=map.get(vertex);
for (EEdge outEdge : v.outEdges) {
if( outEdge.to.des > outEdge.weight+ v.des){
outEdge.to.des=outEdge.weight+ v.des;
queue.add(outEdge.to);
}else if(outEdge.to.isPS && outEdge.from.des > outEdge.weight){
outEdge.from.des=outEdge.weight;
queue.add(outEdge.to);
queue.add(outEdge.from);
}
}
if(queue.size()==0)break;
VE minVertex = queue.remove();
unvisited.remove(minVertex.label);
vertex=minVertex.label;
}
int cost=0;
for (Integer integer : map.keySet()) {
cost+=map.get(integer).des;
}
return cost;
}
private Map<Integer, VE> map = new HashMap<>();
public void addVertex(Integer v, boolean contains){
VE ve=new VE(v);
ve.isPS=contains;
if(contains)ve.des=0;
else ve.des=Integer.MAX_VALUE;
map.putIfAbsent(v,ve);
}
public void addEdge(Integer f, Integer t, int weight){
VE from=map.get(f);
VE to=map.get(t);
if(from.isPS && to.isPS)return;
EEdge edge= new EEdge(from, to, weight);
map.get(f).outEdges.add(edge);
EEdge edge2= new EEdge(to, from, weight);
map.get(t).outEdges.add(edge2);
map.get(f).inEdges.add(edge2);
map.get(t).inEdges.add(edge);
}
private class VE implements Comparable {
private Integer label;
private List<EEdge> inEdges;
private List<EEdge> outEdges;
private boolean isPS;
public boolean visited;
public int des;
public VE(Integer label) {
this.label = label;
this.inEdges=new ArrayList<>();
this.outEdges=new ArrayList<>();
}
@Override
public int compareTo(Object o) {
return this.des - ((VE)o).des;
}
}
static class EEdge implements Comparable{
VE from;
VE to;
int weight;
public EEdge(int weight) {
this.weight = weight;
}
public EEdge(VE from, VE to, int weight) {
this.from = from;
this.to = to;
this.weight = weight;
}
@Override
public int compareTo(Object o) {
return this.weight - ((EEdge)o).weight;
}
}
}
}