← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func abs(x int64) int64 {
	if x < 0 {
		return -x
	}
	return x
}

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	var n int
	var d int64
	fmt.Fscan(in, &n, &d)

	a := make([]int64, n)
	for i := 1; i <= n-2; i++ {
		fmt.Fscan(in, &a[i])
	}

	x := make([]int64, n)
	y := make([]int64, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(in, &x[i], &y[i])
	}

	const INF int64 = 1 << 62
	dist := make([]int64, n)
	used := make([]bool, n)
	for i := 0; i < n; i++ {
		dist[i] = INF
	}
	dist[0] = 0

	for {
		u := -1
		best := INF
		for i := 0; i < n; i++ {
			if !used[i] && dist[i] < best {
				best = dist[i]
				u = i
			}
		}
		if u == -1 {
			break
		}
		used[u] = true
		if u == n-1 {
			break
		}
		for v := 0; v < n; v++ {
			if used[v] || v == u {
				continue
			}
			w := (abs(x[u]-x[v]) + abs(y[u]-y[v]))*d - a[u]
			if dist[u]+w < dist[v] {
				dist[v] = dist[u] + w
			}
		}
	}

	fmt.Fprintln(out, dist[n-1])
}