#include<bits/stdc++.h>
using namespace std;
int n,m,h;
int v[105],w[105],dp[20500];
struct thing
{
int w,v;
}a[105];
bool cmp(thing aa,thing bb)
{
return aa.w<bb.w;
}
int main()
{
while(~scanf("%d",&n)&&n)
{
memset(dp,0,sizeof(dp));
scanf("%d%d",&m,&h);
for(int i=1;i<=n;i++)
scanf("%d%d",&a[i].w,&a[i].v);
sort(a+1,a+n+1,cmp);
if(h==0)
{
for(int i=1;i<=n;i++)
for(int j=m;j>=a[i].w;j--)
dp[j]=max(dp[j],dp[j-a[i].w]+a[i].v);
printf("%d\n",dp[m]);
}
else
{
m+=h;
for(int i=1;i<=n;i++)
for(int j=m-1;j>=0;j--)
if(j+a[i].w<m)
dp[j+a[i].w]=max(dp[j+a[i].w],dp[j]+a[i].v);
else
dp[m]=max(dp[m],dp[j]+a[i].v);
printf("%d\n",dp[m]);
}
}
}
//第二种更好理解的方法,枚举那个有“特权”的物品
//const int N = 100 + 5;
//
//int n, m, h, w[N], v[N], dp[N << 1];
//
//int main()
//{
// while (~scanf("%d", &n) && n)
// {
// scanf("%d%d", &m, &h);
// for (int i = 1; i <= n; ++i) scanf("%d%d", &w[i], &v[i]);
// if (h == 0)
// {
// memset(dp, 0, sizeof(dp));
// for (int i = 1; i <= n; ++i)
// for (int j = m; j >= w[i]; --j)
// dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
// printf("%d\n", dp[m]);
// }
// else
// {
// int ans = 0;
// for (int k = 1; k <= n; ++k)
// {
// memset(dp, 0, sizeof(dp));
// for (int i = 1; i <= n; ++i)
// {
// if (i == k)
// continue;
// for (int j = m + h; j >= w[i]; --j)
// dp[j] = max(dp[j], dp[j - w[i]] + v[i]);
// }
// for (int j = m + h - 1; j >= m + h - w[k]; --j)
// dp[m + h] = max(dp[m + h], dp[j] + v[k]);
// ans = max(ans, dp[m + h]);
// }
// printf("%d\n", ans);
// }
// }
//}