#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000;
int c[maxn], x[maxn], y[maxn], d[maxn], Fre[maxn];
int n, dmax;
void nhap() {
  cin >> n >> dmax;
  for (int i = 2; i < n; i++) {
    scanf("%d", &c[i]);
  }
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &x[i], &y[i]);
  }
}
int kc(int i, int j) { return (abs(x[i] - x[j]) + abs(y[i] - y[j])); }
bool check(int x) {
  int oo = 2e9 + 100;
  for (int i = 0; i <= n; i++) {
    d[i] = -oo;
    Fre[i] = 0;
  }
  d[1] = x;
  for (int i = 1; i <= n; i++) {
    int u = 0;
    for (int j = 1; j <= n; j++) {
      if (d[u] < d[j] && Fre[j] == 0) {
        u = j;
      }
    }
    if (u == 0) break;
    Fre[u] = 1;
    for (int v = 1; v <= n; v++) {
      if (Fre[v] == 0 && d[u] >= dmax * kc(u, v) &&
          d[v] < d[u] - dmax * kc(u, v) + c[v]) {
        d[v] = d[u] - dmax * kc(u, v) + c[v];
      }
    }
  }
  if (d[n] == -oo)
    return (false);
  else
    return (true);
}
void xuli() {
  int l = 0;
  int r = 2e9;
  int res = 2e9;
  while (l <= r) {
    long long midd = (l);
    midd += r;
    midd /= 2;
    int mid = midd;
    if (check(mid)) {
      res = mid;
      r = mid - 1;
    } else {
      l = mid + 1;
    }
  }
  cout << res << endl;
}
int main() {
  nhap();
  xuli();
}
