#include <stdio.h>
#include <stdlib.h>
int N, H, U;
void merge(int *x, int *w, int l, int m, int r) {
int i = l, j = m+1, k = 0;
int *y, *z;
y = (int *)malloc((r-l+1) * sizeof(int));
z = (int *)malloc((r-l+1) * sizeof(int));
while(i<=m && j<=r) {
if(x[i] >= x[j])
{
y[k] = x[i];
z[k++] = w[i++];
}
else
{
y[k] = x[j];
z[k++] = w[j++];
}
}
while(i<=m)
{
y[k] = x[i];
z[k++] = w[i++];
}
while(j<=r)
{
y[k] = x[j];
z[k++] = w[j++];
}
k = 0;
for(i = l; i<=r; i++)
{
x[i] = y[k];
w[i] = z[k++];
}
free(y);
free(z);
}
void mergesort(int *x, int *w, int l, int r) {
int m;
if(l < r) {
m = (l + r) / 2;
mergesort(x, w, l, m);
mergesort(x, w, m + 1, r);
merge(x, w, l, m, r);
}
}
/*
void mergeSmall(int *x, int l, int m, int r) {
int i = l, j = m+1, k = 0;
int *y;
y = (int *)malloc((r-l+1) * sizeof(int));
while(i<=m && j<=r) {
if(x[i] >= x[j])
{
y[k++] = x[i++];
}
else
{
y[k++] = x[j++];
}
}
while(i<=m)
{
y[k++] = x[i++];
}
while(j<=r)
{
y[k++] = x[j++];
}
k = 0;
for(i = l; i<=r; i++)
{
x[i] = y[k++];
}
free(y);
}
void mergesortSmall(int *x, int l, int r) {
int m;
if(l < r) {
m = (l + r) / 2;
mergesortSmall(x, l, m);
mergesortSmall(x, m + 1, r);
mergeSmall(x, l, m, r);
}
}*/
int main() {
FILE *fin = fopen("gutui.in", "r");
FILE *fout = fopen("gutui.out", "w");
fscanf(fin, "%d%d%d", &N, &H, &U);
int i, j, timp = 1, nrGutuiMax, cantar = 0, ok, min;
int *h, *g, *ajunsa, *cosh;
h = (int *)malloc(N * sizeof(int));
g = (int *)malloc(N * sizeof(int));
ajunsa = (int *)malloc(N * sizeof(int));
for (i = 0; i < N; i++)
{
fscanf(fin, "%d%d", &h[i], &g[i]);
}
for (i = 0; i < N; i++)
{
printf("%d\t%d\n", h[i], g[i]);
}
mergesort(h, g, 0, N - 1);
min = h[N - 1];
printf("\n\n");
for (i = 0; i < N; i++)
{
printf("%d\t%d\n", h[i], g[i]);
}
mergesort(g, h, 0, N - 1);
printf("\n\n");
for (i = 0; i < N; i++)
{
printf("%d\t%d\n", h[i], g[i]);
}
for (i = 0; i < N; i++)
{
ajunsa[i] = (H - h[i] + U)/U;
}
printf("\n\n");
for (i = 0; i < N; i++)
{
printf("%d\n", ajunsa[i]);
}
nrGutuiMax = (H - min + U)/U;
printf("Numar maxim de gutui: %d\n", nrGutuiMax);
cosh = (int *)malloc(nrGutuiMax * sizeof(int));
for (i = 0; i < nrGutuiMax; i++)
cosh[i] = 0;
int *nrNivel;
nrNivel = (int *)malloc((nrGutuiMax + 1) * sizeof(int));
for (i = 1; i <= nrGutuiMax; i++)
nrNivel[i] = i;
i = 0;
j = 0;
int promis = 0;
int k = 0;
while (j < nrGutuiMax)
{
if (ajunsa[i] > 0)
{
cantar += g[i];
j++;
for (k = i+1 ; k < N; k++)
if (ajunsa[k] >= ajunsa[i])
ajunsa[k]--;
}
//ok = 0;
//printf("a %d-a gutuie\n", i);
/*
if (ajunsa[i] >= timp && nrNivel[ajunsa[i]] > 0)
{
//if (ajunsa[i] >= promis)
// {
j++;
cantar += g[i];
//if (ajunsa[i] > promis)
//promis;
// if (ajunsa[i] == promis)
// promis++;
printf("i s-a promis\n");
nrNivel[ajunsa[i]]--;
if (nrNivel[ajunsa[i]] == 0)
timp++;
//nrGutuiMax--;
//}
}
*/
/*
if (ajunsa[i] == timp)
{
j++;
cantar += g[i];
nrNivel[ajunsa[i]]--;
if (nrNivel[ajunsa[i]] == 0)
timp++;
printf("a fost luata\n");*/
i++;
//promis++;
//printf("kile de gutui %d: %d\n\n", k++, cantar);
//i++;
}
printf("numar gutui: %d\n", j);
printf("\n kile de gutui: %d\n",cantar);
fprintf(fout, "%d", cantar);
free(h);
free(g);
free(ajunsa);
free(cosh);
fclose(fin);
fclose(fout);
return 0;
}