#include <iostream>
#include <algorithm>
using namespace std;
int n,m;
int cnt=0,ans=0;
struct guantou{
int op;//0拉环罐头,1普通罐头
int happy;
}a[200005];
int kaipingqi[200005],cnt1=0;
bool cmp(guantou x,guantou y){
return x.happy>y.happy;
}
bool cmp1(int x,int y){
return x>y;
}
bool chk(){
for(int i=1;i<=cnt1;i++)
if(kaipingqi[i]>0)
return true;
return false;
}
bool f[200005];
void work(){
for(int i=1;i<=cnt1;i++)
if(kaipingqi[i]>0){
kaipingqi[i]--;
if(f[i]==false)
f[i]=true,m--;
return ;
}
}
int main(){
cin>>n>>m;
for(int i=1,op,x;i<=n;i++){
cin>>op>>x;
if(op==0){
cnt++;
a[cnt].op=0,a[cnt].happy=x;
}
else if(op==1){
cnt++;
a[cnt].op=1,a[cnt].happy=x;
}
else{
cnt1++;
kaipingqi[cnt1]=x;
}
}
sort(a+1,a+n+1,cmp);
sort(kaipingqi+1,kaipingqi+n+1,cmp1);
for(int i=1;i<=cnt;i++){
if(m<=0)
break;
if(a[i].op==0){
ans+=a[i].happy,m--;
}
if(a[i].op==1&&chk()){
ans+=a[i].happy;
work();
m--;
}
}
cout<<ans<<endl;
return 0;
}
代码求调