#include <bits/stdc++.h>
#define ____AnhKietSS____ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define NamDinh signed
#define ll long long
#define foru(i,d,c) for(int i=(d);i<=(c);i++)
#define ford(i,d,c) for(int i=(d);i>=(c);i--)
#define fi first
#define se second
#define pb push_back
#define INF 4557430888798830399LL
using namespace std;
const int N=305;
int n;
ll k;
ll h[N],c[N];
struct Node
{
ll h,c;
int id;
};
NamDinh main()
{
____AnhKietSS____
cin>>n>>k;
foru(i,1,n)
{
cin>>h[i]>>c[i];
}
/*
Ý tưởng:
Với một phương án cuối cùng, các điểm có cùng độ cao tạo thành
một "tầng".
Các tầng phải có độ cao tăng dần.
Nếu tầng trước có p điểm và tầng hiện tại có s điểm:
- Mỗi điểm ở tầng trước ban đầu có 1 trạm.
- Ta có p trạm miễn phí.
- Nếu s > p thì phải xây thêm s-p trạm.
- Những trạm thêm này luôn nên xây tại điểm có C nhỏ nhất
trong tất cả các tầng trước.
Sau khi xử lý một tầng, số trạm miễn phí còn lại tương đương
với max(p,s).
Vì N <= 300, có thể DP theo số điểm của tầng hiện tại,
số trạm miễn phí lớn nhất và điểm có C nhỏ nhất.
Ta thử từng điểm làm khách sạn.
*/
/*
Code dưới đây dùng DP theo thứ tự độ cao.
dp[i][j] = chi phí nhỏ nhất khi đã xử lý i điểm,
tầng hiện tại có j điểm.
Tuy nhiên việc chọn tập điểm của từng tầng phụ thuộc cả H,C,
nên ta sắp xếp theo H và dùng DP nhóm liên tiếp.
Trong phương án tối ưu, các điểm trong cùng tầng có thể
sắp theo H tăng dần; nếu đổi chỗ hai tầng thì tầng có H lớn
hơn không thể đứng trước tầng có H nhỏ hơn mà làm giảm chi phí
nâng độ cao.
Vì vậy sau khi sort H, ta xét các đoạn liên tiếp làm một tầng.
*/
vector<Node> a(n);
foru(i,1,n)
{
a[i-1].h=h[i];
a[i-1].c=c[i];
a[i-1].id=i;
}
sort(a.begin(),a.end(),[](const Node &x,const Node &y)
{
if(x.h!=y.h)
return x.h<y.h;
return x.c<y.c;
});
ll ans=INF;
/*
dp[l][r]:
Chọn [l..r] làm một tầng.
mx = max H trong đoạn.
Độ cao tầng phải lớn hơn tầng trước ít nhất 1.
Ta dùng DP theo số lượng phần tử của tầng trước.
*/
foru(root,0,n-1)
{
vector<Node> b;
b.pb(a[root]);
foru(i,0,n-1)
{
if(i!=root)
b.pb(a[i]);
}
sort(b.begin(),b.end(),[](const Node &x,const Node &y)
{
if(x.h!=y.h)
return x.h<y.h;
return x.c<y.c;
});
/*
root được xem là tầng đầu tiên.
Vì root là khách sạn nên nó không cần đường trượt đi ra.
*/
int m=n;
vector<vector<ll> > dp(m+1,vector<ll>(m+1,INF));
dp[1][1]=0;
foru(i,1,m-1)
{
foru(s,1,m-i+1)
{
if(dp[i][s]>=INF)
continue;
ll lastH=b[i-1].h;
ll mx=b[i].h;
foru(j,i,m-1)
{
mx=max(mx,b[j].h);
int ns=j-i+1;
if(i+ns>m)
break;
ll nh=max(mx,lastH+1);
ll add=0;
foru(t,i,j)
{
add+=k*(nh-b[t].h);
}
/*
Nếu tầng mới có nhiều điểm hơn tầng trước,
cần thêm trạm.
Ta lấy C nhỏ nhất trong các điểm đã xuất hiện.
*/
ll mc=INF;
foru(t,0,i-1)
mc=min(mc,b[t].c);
if(ns>s)
add+=(ll)(ns-s)*mc;
int ni=j+1;
dp[ni][ns]=min(dp[ni][ns],dp[i][s]+add);
lastH=nh;
}
}
}
foru(s,1,m)
ans=min(ans,dp[m][s]);
}
cout<<ans<<"\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIF9fX19BbmhLaWV0U1NfX19fIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKI2RlZmluZSBOYW1EaW5oIHNpZ25lZAojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGZvcnUoaSxkLGMpIGZvcihpbnQgaT0oZCk7aTw9KGMpO2krKykKI2RlZmluZSBmb3JkKGksZCxjKSBmb3IoaW50IGk9KGQpO2k+PShjKTtpLS0pCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBJTkYgNDU1NzQzMDg4ODc5ODgzMDM5OUxMCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE49MzA1OwoKaW50IG47CmxsIGs7CmxsIGhbTl0sY1tOXTsKCnN0cnVjdCBOb2RlCnsKICAgIGxsIGgsYzsKICAgIGludCBpZDsKfTsKCk5hbURpbmggbWFpbigpCnsKICAgIF9fX19BbmhLaWV0U1NfX19fCgogICAgCgogICAgY2luPj5uPj5rOwoKICAgIGZvcnUoaSwxLG4pCiAgICB7CiAgICAgICAgY2luPj5oW2ldPj5jW2ldOwogICAgfQoKICAgIC8qCiAgICAgICAgw50gdMaw4bufbmc6CgogICAgICAgIFbhu5tpIG3hu5l0IHBoxrDGoW5nIMOhbiBjdeG7kWkgY8O5bmcsIGPDoWMgxJFp4buDbSBjw7MgY8O5bmcgxJHhu5kgY2FvIHThuqFvIHRow6BuaAogICAgICAgIG3hu5l0ICJ04bqnbmciLgoKICAgICAgICBDw6FjIHThuqduZyBwaOG6o2kgY8OzIMSR4buZIGNhbyB0xINuZyBk4bqnbi4KCiAgICAgICAgTuG6v3UgdOG6p25nIHRyxrDhu5tjIGPDsyBwIMSRaeG7g20gdsOgIHThuqduZyBoaeG7h24gdOG6oWkgY8OzIHMgxJFp4buDbToKCiAgICAgICAgLSBN4buXaSDEkWnhu4NtIOG7nyB04bqnbmcgdHLGsOG7m2MgYmFuIMSR4bqndSBjw7MgMSB0cuG6oW0uCiAgICAgICAgLSBUYSBjw7MgcCB0cuG6oW0gbWnhu4VuIHBow60uCiAgICAgICAgLSBO4bq/dSBzID4gcCB0aMOsIHBo4bqjaSB4w6J5IHRow6ptIHMtcCB0cuG6oW0uCiAgICAgICAgLSBOaOG7r25nIHRy4bqhbSB0aMOqbSBuw6B5IGx1w7RuIG7Dqm4geMOieSB04bqhaSDEkWnhu4NtIGPDsyBDIG5o4buPIG5o4bqldAogICAgICAgICAgdHJvbmcgdOG6pXQgY+G6oyBjw6FjIHThuqduZyB0csaw4bubYy4KCiAgICAgICAgU2F1IGtoaSB44butIGzDvSBt4buZdCB04bqnbmcsIHPhu5EgdHLhuqFtIG1p4buFbiBwaMOtIGPDsm4gbOG6oWkgdMawxqFuZyDEkcawxqFuZwogICAgICAgIHbhu5tpIG1heChwLHMpLgoKICAgICAgICBWw6wgTiA8PSAzMDAsIGPDsyB0aOG7gyBEUCB0aGVvIHPhu5EgxJFp4buDbSBj4bunYSB04bqnbmcgaGnhu4duIHThuqFpLAogICAgICAgIHPhu5EgdHLhuqFtIG1p4buFbiBwaMOtIGzhu5tuIG5o4bqldCB2w6AgxJFp4buDbSBjw7MgQyBuaOG7jyBuaOG6pXQuCgogICAgICAgIFRhIHRo4butIHThu6tuZyDEkWnhu4NtIGzDoG0ga2jDoWNoIHPhuqFuLgogICAgKi8KCiAgICAvKgogICAgICAgIENvZGUgZMaw4bubaSDEkcOieSBkw7luZyBEUCB0aGVvIHRo4bupIHThu7EgxJHhu5kgY2FvLgoKICAgICAgICBkcFtpXVtqXSA9IGNoaSBwaMOtIG5o4buPIG5o4bqldCBraGkgxJHDoyB44butIGzDvSBpIMSRaeG7g20sCiAgICAgICAgdOG6p25nIGhp4buHbiB04bqhaSBjw7MgaiDEkWnhu4NtLgoKICAgICAgICBUdXkgbmhpw6puIHZp4buHYyBjaOG7jW4gdOG6rXAgxJFp4buDbSBj4bunYSB04burbmcgdOG6p25nIHBo4bulIHRodeG7mWMgY+G6oyBILEMsCiAgICAgICAgbsOqbiB0YSBz4bqvcCB44bq/cCB0aGVvIEggdsOgIGTDuW5nIERQIG5ow7NtIGxpw6puIHRp4bq/cC4KCiAgICAgICAgVHJvbmcgcGjGsMahbmcgw6FuIHThu5FpIMawdSwgY8OhYyDEkWnhu4NtIHRyb25nIGPDuW5nIHThuqduZyBjw7MgdGjhu4MKICAgICAgICBz4bqvcCB0aGVvIEggdMSDbmcgZOG6p247IG7hur91IMSR4buVaSBjaOG7lyBoYWkgdOG6p25nIHRow6wgdOG6p25nIGPDsyBIIGzhu5tuCiAgICAgICAgaMahbiBraMO0bmcgdGjhu4MgxJHhu6luZyB0csaw4bubYyB04bqnbmcgY8OzIEggbmjhu48gaMahbiBtw6AgbMOgbSBnaeG6o20gY2hpIHBow60KICAgICAgICBuw6JuZyDEkeG7mSBjYW8uCgogICAgICAgIFbDrCB24bqteSBzYXUga2hpIHNvcnQgSCwgdGEgeMOpdCBjw6FjIMSRb+G6oW4gbGnDqm4gdGnhur9wIGzDoG0gbeG7mXQgdOG6p25nLgogICAgKi8KCiAgICB2ZWN0b3I8Tm9kZT4gYShuKTsKCiAgICBmb3J1KGksMSxuKQogICAgewogICAgICAgIGFbaS0xXS5oPWhbaV07CiAgICAgICAgYVtpLTFdLmM9Y1tpXTsKICAgICAgICBhW2ktMV0uaWQ9aTsKICAgIH0KCiAgICBzb3J0KGEuYmVnaW4oKSxhLmVuZCgpLFtdKGNvbnN0IE5vZGUgJngsY29uc3QgTm9kZSAmeSkKICAgIHsKICAgICAgICBpZih4LmghPXkuaCkKICAgICAgICAgICAgcmV0dXJuIHguaDx5Lmg7CiAgICAgICAgcmV0dXJuIHguYzx5LmM7CiAgICB9KTsKCiAgICBsbCBhbnM9SU5GOwoKICAgIC8qCiAgICAgICAgZHBbbF1bcl06CgogICAgICAgIENo4buNbiBbbC4ucl0gbMOgbSBt4buZdCB04bqnbmcuCgogICAgICAgIG14ID0gbWF4IEggdHJvbmcgxJFv4bqhbi4KICAgICAgICDEkOG7mSBjYW8gdOG6p25nIHBo4bqjaSBs4bubbiBoxqFuIHThuqduZyB0csaw4bubYyDDrXQgbmjhuqV0IDEuCgogICAgICAgIFRhIGTDuW5nIERQIHRoZW8gc+G7kSBsxrDhu6NuZyBwaOG6p24gdOG7rSBj4bunYSB04bqnbmcgdHLGsOG7m2MuCiAgICAqLwoKICAgIGZvcnUocm9vdCwwLG4tMSkKICAgIHsKICAgICAgICB2ZWN0b3I8Tm9kZT4gYjsKICAgICAgICBiLnBiKGFbcm9vdF0pOwoKICAgICAgICBmb3J1KGksMCxuLTEpCiAgICAgICAgewogICAgICAgICAgICBpZihpIT1yb290KQogICAgICAgICAgICAgICAgYi5wYihhW2ldKTsKICAgICAgICB9CgogICAgICAgIHNvcnQoYi5iZWdpbigpLGIuZW5kKCksW10oY29uc3QgTm9kZSAmeCxjb25zdCBOb2RlICZ5KQogICAgICAgIHsKICAgICAgICAgICAgaWYoeC5oIT15LmgpCiAgICAgICAgICAgICAgICByZXR1cm4geC5oPHkuaDsKICAgICAgICAgICAgcmV0dXJuIHguYzx5LmM7CiAgICAgICAgfSk7CgogICAgICAgIC8qCiAgICAgICAgICAgIHJvb3QgxJHGsOG7o2MgeGVtIGzDoCB04bqnbmcgxJHhuqd1IHRpw6puLgoKICAgICAgICAgICAgVsOsIHJvb3QgbMOgIGtow6FjaCBz4bqhbiBuw6puIG7DsyBraMO0bmcgY+G6p24gxJHGsOG7nW5nIHRyxrDhu6N0IMSRaSByYS4KICAgICAgICAqLwoKICAgICAgICBpbnQgbT1uOwoKICAgICAgICB2ZWN0b3I8dmVjdG9yPGxsPiA+IGRwKG0rMSx2ZWN0b3I8bGw+KG0rMSxJTkYpKTsKCiAgICAgICAgZHBbMV1bMV09MDsKCiAgICAgICAgZm9ydShpLDEsbS0xKQogICAgICAgIHsKICAgICAgICAgICAgZm9ydShzLDEsbS1pKzEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKGRwW2ldW3NdPj1JTkYpCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICAgICAgbGwgbGFzdEg9YltpLTFdLmg7CgogICAgICAgICAgICAgICAgbGwgbXg9YltpXS5oOwoKICAgICAgICAgICAgICAgIGZvcnUoaixpLG0tMSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBteD1tYXgobXgsYltqXS5oKTsKCiAgICAgICAgICAgICAgICAgICAgaW50IG5zPWotaSsxOwoKICAgICAgICAgICAgICAgICAgICBpZihpK25zPm0pCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBsbCBuaD1tYXgobXgsbGFzdEgrMSk7CgogICAgICAgICAgICAgICAgICAgIGxsIGFkZD0wOwoKICAgICAgICAgICAgICAgICAgICBmb3J1KHQsaSxqKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWRkKz1rKihuaC1iW3RdLmgpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICAgTuG6v3UgdOG6p25nIG3hu5tpIGPDsyBuaGnhu4F1IMSRaeG7g20gaMahbiB04bqnbmcgdHLGsOG7m2MsCiAgICAgICAgICAgICAgICAgICAgICAgIGPhuqduIHRow6ptIHRy4bqhbS4KCiAgICAgICAgICAgICAgICAgICAgICAgIFRhIGzhuqV5IEMgbmjhu48gbmjhuqV0IHRyb25nIGPDoWMgxJFp4buDbSDEkcOjIHh14bqldCBoaeG7h24uCiAgICAgICAgICAgICAgICAgICAgKi8KCiAgICAgICAgICAgICAgICAgICAgbGwgbWM9SU5GOwoKICAgICAgICAgICAgICAgICAgICBmb3J1KHQsMCxpLTEpCiAgICAgICAgICAgICAgICAgICAgICAgIG1jPW1pbihtYyxiW3RdLmMpOwoKICAgICAgICAgICAgICAgICAgICBpZihucz5zKQogICAgICAgICAgICAgICAgICAgICAgICBhZGQrPShsbCkobnMtcykqbWM7CgogICAgICAgICAgICAgICAgICAgIGludCBuaT1qKzE7CgogICAgICAgICAgICAgICAgICAgIGRwW25pXVtuc109bWluKGRwW25pXVtuc10sZHBbaV1bc10rYWRkKTsKCiAgICAgICAgICAgICAgICAgICAgbGFzdEg9bmg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZvcnUocywxLG0pCiAgICAgICAgICAgIGFucz1taW4oYW5zLGRwW21dW3NdKTsKICAgIH0KCiAgICBjb3V0PDxhbnM8PCJcbiI7CgogICAgcmV0dXJuIDA7Cn0=