#include <bits/stdc++.h>
long long minn(long long a, long long b) { return a <= b ? a : b; }
int n;
long long d;
int a[200005];
int ptr1[200005];
int ptr2[200005];
long long c1[200005];
long long c2[200005];
std::set<std::pair<int, int>> kruskal;
bool done[200005];
long long ans = 0;
int main() {
  scanf("%d%lld", &n, &d);
  for (int i = 1; i <= n; i++) {
    scanf("%d", a + i);
    ptr1[i] = i - 1;
    ptr2[i] = i + 1;
    c1[i] = c2[i] = a[i];
  }
  for (int i = 2; i <= n; i++) {
    kruskal.insert({c2[i - 1] + c1[i], i});
  }
  done[1] = 1;
  done[n + 1] = 1;
  while (!kruskal.empty()) {
    int i2 = kruskal.begin()->second;
    if (done[i2]) {
      kruskal.erase(kruskal.begin());
      continue;
    }
    done[i2] = 1;
    ans += kruskal.begin()->first + d;
    kruskal.erase(kruskal.begin());
    int i3 = ptr2[i2];
    int i1 = ptr1[i2];
    int i0 = ptr1[i1];
    ptr2[i0] = i1;
    ptr2[i1] = i3;
    ptr1[i3] = i1;
    ptr1[i1] = i0;
    if (c1[i1] > c1[i2] + (i2 - i1) * d) {
      c1[i1] = c1[i2] + (i2 - i1) * d;
      kruskal.insert({c2[i0] + c1[i1], i1});
    }
    c2[i1] = minn(c2[i2], c2[i1] + (i3 - i2) * d);
    kruskal.insert({c2[i1] + c1[i3], i3});
  }
  printf("%lld\n", ans);
}
