#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
struct node
{
int x,y;
}a[N];
bool cmp(node a,node b)
{
return a.y<b.y;
}
int main()
{
ll n,s;cin>>n>>s;
//tot:目前还未完成训练的所有士兵都单独训练一次需要的金币
// al: 团训的次数
ll tot=0,al=0,ans=0;
for(int i=1;i<=n;i++) cin>>a[i].x>>a[i].y,tot+=a[i].x;
//团训一次一开始一般是比每名士兵单训一次更好,但随着有士兵训练完成,即需要的单训需要金币变少,就要判断此时是选择团训和单训了
// 所以训练次数少的士兵是否训练完会影响后面的判断,所以要排序
sort(a+1,a+1+n,cmp);
//遍历每个士兵,每次对于当前士兵的训练方案选择单独训一次和团训一次中需金币较小的方案 (贪心算法)
for(int i=1;i<=n;i++)
{
if(tot>=s){
ans+=(a[i].y-al)*s;
tot-=a[i].x;
al+=(a[i].y-al);
}
else{
ans+=(a[i].y-al)*a[i].x;
}
}
cout<<ans;
return 0;
}