void main(){ import std.stdio, std.string, std.conv, std.algorithm; import std.range; int n, d; rd(n, d); auto a=new int[](n); auto b=new int[](n); foreach(i; 0..n) rd(a[i], b[i]); auto dp=new int[][](n+1, 2); // tokyo->0, kyoto->1 dp[0][1]=-10^^9; foreach(i; 0..n){ dp[i+1][1]=max(dp[i][0]-d+b[i], dp[i][1]+b[i]); dp[i+1][0]=max(dp[i][1]-d+a[i], dp[i][0]+a[i]); } writeln(max(dp[n][0], dp[n][1])); } void rd(T...)(ref T x){ import std.stdio, std.string, std.conv; auto l=readln.split; foreach(i, ref e; x){ e=l[i].to!(typeof(e)); } }