#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
pll dat[1000000];
ll u;
ll inf=1000000000000000000;
ll par[200010];
ll len[200010];
void init(ll n){
  for(ll i=0;i<n;i++){
    par[i]=i;
    len[i]=0;
  }
}
ll root(ll n){
  if(par[n]==n)return n;
  return par[n]=root(par[n]);
}
void unit(ll a,ll b){
  a=root(a);
  b=root(b);
  if(a==b)return;
  if(len[a]>len[b])par[b]=a;
  else{
    par[a]=b;
    if(len[a]==len[b])len[b]++;
  }
}
void add(ll n,ll x){
  ll now=n+u-1;
  dat[now]=make_pair(x,now-u+1);
  while(now>0){
    now=(now-1)/2;
    dat[now]=min(dat[2*now+1],dat[2*now+2]);
  }
}
ll que(ll a,ll b,ll k,ll l,ll r){
  if(a>=r||b<=l)return inf;
  if(a<=l&&b>=r)return dat[k];
  ll c=que(a,b,2*k+1,l,(l+r)/2);
  ll d=que(a,b,2*k+2,(l+r)/2,r);
  return min(c,d);
}
int main(){
  ll n,d;cin>>n>>d;
  for(ll i=0;;i++){
    ll j=pow(2,i);
    if(j>=n-1){
      u=j;
      break;
    }
  }
  init(n);
  fill(dat,dat+2*u,make_pair(inf,0));
  ll a[n];
  vector<pll> ai(n),aj(n);
  for(ll i=0;i<n;i++){
    cin>>a[i];
    ai[i]=make_pair(a[i]-i*d,i);
    aj[i]=make_pair(a[j]+j*d,i);
  }
  sort(aj.begin(),aj.end());
  ll num[n];
  for(ll i=0;i<n-1;i++){
    for(ll j=0;j<n;j++){
      if(aj[j].second>i){
        num[i]=j;
        break;
      }
    }
  }
  for(ll i=0;i<n-1;i++){
    add(i,aj[num[i]].first+ai[i].first);
  }
  ll now=1;
  ll ans=0;
  for(;;){
    pll p=que(0,n,0,0,n);
    ll ps=p.second;
    ll pf=p.first;
    ll nj=aj[num[ps]].second;
    if(root(nj)!=root(ps)){
      ans+=pf;
      unit(ps,nj);
      now++;
      ll nu=-1;
      for(ll i=nj+1;i<n;i++){
        if(aj[i].second>ps){
          num[ps]=i;
          break;
        }
      }
      if(nu==-1){
        add(inf,0);
      }
      else{
        add(ps,aj[num[ps]].first+ai[ps].first);
      }
    }
    if(now==n){
      break;
    }
  }
  cout<<ans<<endl;
}
          
      