#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
int n, D, x, a[N];
long long f[N][2][20], ans;
struct tree {
  int tag;
  long long l, r, mn, del;
} T[N << 2];
int read() {
  int tmp = 0, fh = 1;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') fh = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') tmp = tmp * 10 + c - 48, c = getchar();
  return tmp * fh;
}
inline long long qmin(int l, int r, int t) {
  int k = log2(r - l + 1);
  return min(f[l][t][k], f[r - (1 << k) + 1][t][k]);
}
void build(int o, int l, int r) {
  T[o].tag = 2;
  T[o].del = 0;
  if (l < r) {
    build((o << 1), l, ((l + r) >> 1));
    build(((o << 1) | 1), ((l + r) >> 1) + 1, r);
    T[o].mn = min(T[(o << 1)].mn, T[((o << 1) | 1)].mn);
    T[o].l = T[(o << 1)].l;
    T[o].r = T[((o << 1) | 1)].r;
  } else
    T[o].mn = T[o].l = T[o].r = f[l][1][0] + a[0];
}
void change_r(int o, int l, int r, int t, long long d) {
  if (T[o].r < 1e17 && T[o].r > f[r][t][0] + d) {
    T[o].tag = t;
    T[o].del = d;
    T[o].mn = qmin(l, r, t) + d;
    T[o].l = f[l][t][0] + d;
    T[o].r = f[r][t][0] + d;
    return;
  }
  if (l == r) return;
  change_r((o << 1), l, ((l + r) >> 1), t, d);
  if (T[((o << 1) | 1)].l < 1e17 &&
      T[((o << 1) | 1)].l > f[((l + r) >> 1) + 1][t][0] + d)
    change_r(((o << 1) | 1), ((l + r) >> 1) + 1, r, t, d);
  T[o].mn = min(T[(o << 1)].mn, T[((o << 1) | 1)].mn);
  T[o].l = T[(o << 1)].l;
  T[o].r = T[((o << 1) | 1)].r;
}
void change_l(int o, int l, int r, int t, long long d) {
  if (T[o].l < 1e17 && T[o].l > f[l][t][0] + d) {
    T[o].tag = t;
    T[o].del = d;
    T[o].mn = qmin(l, r, t) + d;
    T[o].l = f[l][t][0] + d;
    T[o].r = f[r][t][0] + d;
    return;
  }
  if (l == r) return;
  change_l(((o << 1) | 1), ((l + r) >> 1) + 1, r, t, d);
  if (T[(o << 1)].r < 1e17 && T[(o << 1)].r > f[((l + r) >> 1)][t][0] + d)
    change_l((o << 1), l, ((l + r) >> 1), t, d);
  T[o].mn = min(T[(o << 1)].mn, T[((o << 1) | 1)].mn);
  T[o].l = T[(o << 1)].l;
  T[o].r = T[((o << 1) | 1)].r;
}
int walk(int o, int l, int r) {
  if (l == r) {
    ans += T[o].mn;
    T[o].tag = -1;
    T[o].mn = T[o].l = T[o].r = 1e17;
    return l;
  }
  if (T[o].tag != 2) {
    if (T[(o << 1)].tag != -1) {
      T[(o << 1)].tag = T[o].tag;
      T[(o << 1)].del = T[o].del;
      T[(o << 1)].mn = qmin(l, ((l + r) >> 1), T[o].tag) + T[o].del;
      T[(o << 1)].l = f[l][T[o].tag][0] + T[o].del;
      T[(o << 1)].r = f[((l + r) >> 1)][T[o].tag][0] + T[o].del;
    }
    if (T[((o << 1) | 1)].tag != -1) {
      T[((o << 1) | 1)].tag = T[o].tag;
      T[((o << 1) | 1)].del = T[o].del;
      T[((o << 1) | 1)].mn = qmin(((l + r) >> 1) + 1, r, T[o].tag) + T[o].del;
      T[((o << 1) | 1)].l = f[((l + r) >> 1) + 1][T[o].tag][0] + T[o].del;
      T[((o << 1) | 1)].r = f[r][T[o].tag][0] + T[o].del;
    }
    T[o].tag = 2;
    T[o].del = 0;
  }
  int pos;
  if (T[(o << 1)].mn == T[o].mn) {
    pos = walk((o << 1), l, ((l + r) >> 1));
    if (T[((o << 1) | 1)].l < 1e17 &&
        T[((o << 1) | 1)].l >
            a[pos] + a[((l + r) >> 1) + 1] + (((l + r) >> 1) + 1ll - pos) * D)
      change_r(((o << 1) | 1), ((l + r) >> 1) + 1, r, 1,
               a[pos] - 1ll * pos * D);
  } else {
    pos = walk(((o << 1) | 1), ((l + r) >> 1) + 1, r);
    if (T[(o << 1)].r < 1e17 &&
        T[(o << 1)].r >
            a[pos] + a[((l + r) >> 1)] + 1ll * (pos - ((l + r) >> 1)) * D)
      change_l((o << 1), l, ((l + r) >> 1), 0, a[pos] + 1ll * pos * D);
  }
  T[o].mn = min(T[(o << 1)].mn, T[((o << 1) | 1)].mn);
  T[o].l = T[(o << 1)].l;
  T[o].r = T[((o << 1) | 1)].r;
  return pos;
}
int main() {
  n = read();
  D = read();
  for (int i = 0; i < n; i++)
    a[i] = read(), f[i][0][0] = a[i] - 1ll * i * D,
    f[i][1][0] = a[i] + 1ll * i * D;
  for (int j = 1; (1 << j) <= n; j++)
    for (int i = 0; i + (1 << j) <= n; i++)
      f[i][0][j] = min(f[i][0][j - 1], f[i + (1 << (j - 1))][0][j - 1]),
      f[i][1][j] = min(f[i][1][j - 1], f[i + (1 << (j - 1))][1][j - 1]);
  build(1, 1, n - 1);
  for (int i = 1; i < n; i++) walk(1, 1, n - 1);
  printf("%lld\n", ans);
  return 0;
}
