#include <iostream>
#include <cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
int dp[2][10001];
struct point{
int t,s;
}ps[3001];
bool cmp(point A, point B)
{
return A.t*B.s < B.t*A.s;//比较大小的时候千万不要 计算出数值进行比较
}
int main(){
int n,t;
int i,j;
while(cin>>n>>t){
for(i=0;i<n;i++)
{
cin>>ps[i].t>>ps[i].s;
}
sort(ps,ps+n,cmp);
memset(dp,0,sizeof(dp));
int ma=-1;
for(i=1;i<=n;i++){
for(j=ps[i-1].t;j<=t;j++){
dp[i%2][j]=max(dp[(i-1)%2][j],dp[(i-1)%2][j-ps[i-1].t]+ps[i-1].s*(t-(j-ps[i-1].t)));
if(i==n) ma=max(ma,dp[i%2][j]);
}
}
/* for(int i = 0; i < n; i++)
for(int j = t; j >= ps[i].t; j--){
int index=0;
dp[index][j] = max(dp[index][j], dp[index][j-ps[i].t]+(t-j+ps[i].t)*ps[i].s);
if(i==n-1) ma=max(ma,dp[index][j]);
}*/
cout<<ma<<endl;
}
return 0;
}