#include <bits/stdc++.h>
using namespace std;
#define int long long
const int INF = 1e18;
const int MAXN = 45;
int n,k,cate;
pair<int,int> v[305];
int dp[2][MAXN][MAXN][MAXN];
int invc[305];
map<int,int> nrm;
map<int, vector<int>> ofh;
void chmin(int&x, int y)
{
x = min(x, y);
}
signed main()
{
ios_base::sync_with_stdio(0);cin.tie(0);
cin>>n>>k;
int maxh = 0;
for(int i=1;i<=n;i++)
{
cin>>v[i].first>>v[i].second;
maxh = max(maxh, v[i].first);
nrm[v[i].second]++;
ofh[v[i].first].push_back(i);
}
//assert(maxh <= 300);
maxh += n;
for(auto&it:nrm)
{
it.second = ++cate;
invc[cate] = it.first;
}
cate++;
invc[cate] = INF;
for(int minc=0;minc<=cate;minc++)
for(int cnt=0;cnt<=n;cnt++)
for(int free=0;free<=n+1;free++)
dp[1][minc][cnt][free] = INF;
dp[1][cate][0][1] = 0;
for(int h=0;h<=maxh;h++)
{
int pas = h%2;
for(int minc=0;minc<=cate;minc++)
for(int cnt=0;cnt<=n;cnt++)
for(int free=0;free<=n+1;free++)
dp[pas][minc][cnt][free] = INF;
vector<int> aux;
for(int id:ofh[h])
aux.push_back(nrm[v[id].second]);
sort(aux.begin(), aux.end());
for(int minc=1;minc<=cate;minc++)
{
for(int cnt=0;cnt<=n;cnt++)
{
for(int free=0;free<=n+1;free++)
{
if(dp[1-pas][minc][cnt][free] == INF)
continue;
for(int putdown=0;putdown<=cnt;putdown++)
{
for(int pickup=0;pickup<=aux.size();pickup++)
{
int newmin = minc;
if(pickup < aux.size())
newmin = min(newmin, aux[0]);
int newfree = free, newpaying = putdown + (int)aux.size() - pickup;
int mnm = min(newfree, newpaying);
newfree -= mnm;
newpaying -= mnm;
if(newpaying == 0 || minc < cate) chmin(dp[pas][newmin][cnt - putdown + pickup][newfree + putdown + (int)aux.size() - pickup], dp[1-pas][minc][cnt][free] + newpaying * invc[minc] + (cnt - putdown + pickup) * k);
}
}
}
}
}
}
int rez = INF;
for(int minc=1;minc<=cate;minc++)
for(int free=0;free<=n+1;free++)
rez = min(rez, dp[maxh%2][minc][0][free]);
assert(rez != INF);
cout<<rez;
return 0;
}