#include<cstdio>
#include<cstring>
#define max(a, b) a>b?a:b
using namespace std ;
int dp[105][105] ;
struct page{
int w ;
int v ;
}pg[105] ;
int main(){
int n, m, k, s, i, j, h ;
while(~scanf("%d%d%d%d", &n, &m, &k, &s)){
for(i=1; i<=k; i++)
scanf("%d%d", &pg[i].v, &pg[i].w) ;
memset(dp, 0, sizeof(dp)) ;
for(i=1; i<=s; i++)
for(h=1; h<=k; h++)
for(j=pg[h].w; j<=m; j++)
dp[i][j] = max(dp[i][j], dp[i-1][j-pg[h].w]+pg[h].v) ;
for(j=0; j<=m; j++)
if(dp[i-1][j]>=n)
break ;
printf("%d\n", m-j) ;
}
return 0 ;
#include<cstring>
#define max(a, b) a>b?a:b
using namespace std ;
int dp[105][105] ;
struct page{
int w ;
int v ;
}pg[105] ;
int main(){
int n, m, k, s, i, j, h ;
while(~scanf("%d%d%d%d", &n, &m, &k, &s)){
for(i=1; i<=k; i++)
scanf("%d%d", &pg[i].v, &pg[i].w) ;
memset(dp, 0, sizeof(dp)) ;
for(i=1; i<=s; i++)
for(h=1; h<=k; h++)
for(j=pg[h].w; j<=m; j++)
dp[i][j] = max(dp[i][j], dp[i-1][j-pg[h].w]+pg[h].v) ;
for(j=0; j<=m; j++)
if(dp[i-1][j]>=n)
break ;
printf("%d\n", m-j) ;
}
return 0 ;
}