题目
int dp[2005][2005];
int main(){
SIS;
int n,m,k,s;
int a[105],b[125];
//还需经验,忍耐度,种类,最多杀怪数
while(cin>>n>>m>>k>>s){
for(int i=0;i<k;i++){
cin>>a[i]>>b[i];
}
memset(dp,0,sizeof(dp));
for(int i=0;i<k;i++){//种类
for(int p=1;p<=s;p++){//杀怪数
for(int j=b[i];j<=m;j++){//忍耐度
dp[p][j]=max(dp[p][j],dp[p-1][j-b[i]]+a[i]);
}
}
}
if(dp[s][m]<n){
cout<<"-1"<<endl;
continue;
}
int ans=0;
for(int j=1;j<=m;j++){
if(dp[s][j]>=n){
ans=j;break;
}
}
cout<<m-ans<<endl;
}
return 0;
}