class BIT: def __init__(self,n): self.n=n self.tree=[0]*(n+1) def add(self,i,x): i+=1 while i<=self.n: self.tree[i]+=x i+=i&-i def _sum(self,i): res=0 i+=1 while i>0: res+=self.tree[i] i-=i&-i return res def sum(self,l,r): return self._sum(r-1)-self._sum(l-1) class FakeMultiset: def __init__(self,a): self.z=sorted(a) self.d={v:i for i,v in enumerate(self.z)} self.n=len(self.z) self.st=BIT(self.n) def add(self,i): self.st.add(self.d[i],1) def remove(self,i): self.st.add(self.d[i],-1) def pop(self,k): k=(k%self.st.sum(0,self.n))+1 ok=self.n ng=-1 while ok-ng>1: m=(ok+ng)//2 if k<=self.st.sum(0,m+1): ok=m else: ng=m self.st.add(ok,-1) return self.z[ok] n,K,D=map(int,input().split()) a=list(map(int,input().split())) ans=sum(a) X=10**10 pl=FakeMultiset([u for v in a for u in [v-D,v]]+[-X,X]) pl.add(-X) pr=FakeMultiset([u for v in a for u in [v-D,v]]+[-X,X]) pr.add(X) h=0 for i in range(n): v=a[i] l,r=v-D,v rr=pr.pop(0) if l<=rr: pr.add(rr) pl.add(l) else: h+=l-rr pl.add(rr) pr.add(l) ll=pl.pop(-1) if ll<=r: pl.add(ll) pr.add(r) else: h+=ll-r pr.add(ll) pl.add(r) if i