import java.util.*; class Tuple implements Comparable { int distance, node; Tuple(int distance, int node) { this.distance = distance; this.node = node; } @Override public int compareTo(Tuple other) { return Integer.compare(this.distance, other.distance); } } public class _14938 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] line1 = sc.nextLine().split(" "); int n = Integer.parseInt(line1[0]); int m = Integer.parseInt(line1[1]); int r = Integer.parseInt(line1[2]); String[] line2 = sc.nextLine().split(" "); int[] items = new int[n+1]; for(int i=1; i<=n; i++) items[i] = Integer.parseInt(line2[i-1]); @ SuppressWarnings("unchecked") ArrayList[] graph = new ArrayList[n+1]; for(int i=0; i<=n; i++) graph[i] = new ArrayList(); for(int i=0; i pq = new PriorityQueue<>(); pq.add(new Tuple(0, start)); // (distance, node) distance[start] = 0; while (!pq.isEmpty()) { Tuple current = pq.poll(); if(current.distance > distance[current.node]) continue; for (Tuple next : graph[current.node]) { if(distance[next.node] > distance[current.node] + next.distance) { distance[next.node] = distance[current.node] + next.distance; pq.add(new Tuple(distance[next.node], next.node)); } } } int temp = 0; for(int i=1; i<=n; i++) { if(distance[i] <= m) temp += items[i]; } result = Math.max(result, temp); } System.out.println(result); } }