#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

constexpr int N = 310;
constexpr ll INF = 0x3f3f3f3f3f3f3f3f;

int n, h[N], c[N], cnt[N << 1], mnc[N << 1];
ll K, f[N << 1][N][N];

vector<int> hs;

inline ll F(int n, int m, int k) {
	n = min(n, k / m);
	return n * (n - 1) / 2 * m + n * (k - n * m);
}

inline void chkmin(int &lhs, int rhs) {lhs = min(lhs, rhs);}
inline void chkmin(ll &lhs, ll rhs) {lhs = min(lhs, rhs);}

int main() {
	ios_base::sync_with_stdio(0); cin.tie(nullptr), cout.tie(nullptr);
	cin >> n >> K;
	for (int i = 1; i <= n; i++) cin >> h[i] >> c[i], hs.emplace_back(h[i]), hs.emplace_back(h[i] + 1);
	sort(hs.begin(), hs.end()); hs.erase(unique(hs.begin(), hs.end()), hs.end());
	memset(mnc, 0x3f, sizeof(mnc));
	for (int i = 1; i <= n; i++) {
		h[i] = lower_bound(hs.begin(), hs.end(), h[i]) - hs.begin();
		cnt[h[i]]++, chkmin(mnc[h[i]], c[i]);
	}
	memset(f, 0x3f, sizeof(f)), f[0][1][0] = 0;
	int m = hs.size(), mn = 2e9;
	for (int i = 0; i < m; i++) {
		int wid = i + 1 < m ? min(n, hs[i + 1] - hs[i]) : n;
		for (int j = 1; j <= n; j++) {
			for (int k = 0; k <= n; k++) if (f[i][j][k] < INF) {
				chkmin(f[i][j + 1][k], f[i][j][k] + mn);
				cout << i << ' ' << j << ' ' << k << ' ' << f[i][j][k] << '\n';
				chkmin(f[i + 1][j][max(k + cnt[i] - wid * j, 0)], f[i][j][k] + F(wid, j, k + cnt[i]) * K);
			}
		}
		mn = min(mn, mnc[i]);
	}
	ll ans = INF;
	for (int j = 1; j <= n; j++) ans = min(ans, f[m][j][0]);
	cout << ans;
	return 0;
}