#include <iostream>
#include <stdio.h>#include <string.h>using namespace std;int main(){ int n,m,t,s; int dp[205]; int w[205]; int v[205]; int cnt[205]; while(~scanf("%d %d %d %d",&n,&m,&t,&s)) { memset(dp,0,sizeof(dp)); memset(cnt,0,sizeof(cnt)); for(int i=0;i<t;i++) { scanf("%d %d",&v[i],&w[i]); } for(int i=0;i<t;i++) { for(int j=w[i];j<=m;j++)//顺序,如果逆序的话就是01背包的问题了 { if(dp[j]<dp[j-w[i]]+v[i]) { cnt[j]=cnt[j-1]+1;//如果多取一件东西的经验更多的话,就打怪次数增加 dp[j]=dp[j-w[i]]+v[i]; } } } int ans=-1; for(int j=0;j<=m;j++) { if(dp[j]>=n&&cnt[j]<=s) { ans=m-j; break; } } cout<<ans<<endl; } return 0;}