#include<bits/stdc++.h>
using namespace std;
const long long inf=1e10;
int n;
long long d,k;
long long pos[500001],val[500001];
long long dp[500001];
deque<long long> Q;
bool check(long long mid)
{
if(!Q.empty())Q.clear();
long long l=(d-mid<0?0:d-mid);
long long r=d+mid;
int las=0;
for(int i=0; i<=n; i++)
dp[i]=-inf;
dp[0]=0;
for(int i=1; i<=n; i++)
{
while(pos[las]<pos[i]-r)las++;
while(pos[i]-l>=pos[las]&&pos[i]-r<=pos[las]&&las<i)
{
while(Q.size()&&(dp[