而且没快读
#include<bits/stdc++.h>
using namespace std;
const int N=5001,S=51;
using i64=long long;
struct {
int n,s;
i64 t[N],f[N],dp[N][N];//
void LOL(){
cin>>n>>s;
for(int i=1;i<=n;++i) {
cin>>t[i]>>f[i];
t[i]+=t[i-1];
f[i]+=f[i-1];
fill(dp[i]+2,dp[i]+n+1,0x3f3f3f3f3f3f3f3f); //
dp[1][i]=f[i]*(t[i]+s);
}
auto RM=[&](i64&x,i64 y){
x>y?x=y:0;
return;
};
int j;
for(int i=2;i<=n;++i)
for(int k=2;k<=i;++k){
int fac=t[i]+1ll*k*s;
for(j=k-1;j<i-3;j+=4)[&]{
RM(dp[k][i],dp[k-1][j]+(f[i]-f[j])*fac);
RM(dp[k][i],dp[k-1][j+1]+(f[i]-f[j+1])*fac);
RM(dp[k][i],dp[k-1][j+2]+(f[i]-f[j+2])*fac);
RM(dp[k][i],dp[k-1][j+3]+(f[i]-f[j+3])*fac);
}();
for(;j<i;++j)
RM(dp[k][i],dp[k-1][j]+(f[i]-f[j])*fac);
}
i64 res=0x3f3f3f3f3f3f3f3f;
for(int i=1;i<=n;++i) res=min(res,dp[i][n]);
cout<<res<<'\n';
}
} DNF;
main(){DNF.LOL();}