/*
 * This code is from "Algorithms in C, Third Edition,"
 * by Robert Sedgewick, Addison Wesley Longman, 1998.
 */

#include <stdio.h>
#include <stdlib.h>

#define NMAX 1000

typedef struct {int size; int val; } Item;

int knap(int);

int n;
Item items[NMAX];

int main(int argc, char *argv[])
{
  int cap=atoi(argv[2]), i;

  n=atoi(argv[1]);

  for (i=0; i<n; i++) 
    scanf("%d %d", &items[i].size, &items[i].val);

  printf("Valor maximo: %d\n", knap(cap));
    
  return 0;
}

int knap(int cap)
  { int i, space, max, t;
    for (i = 0, max = 0; i < n; i++)
      if ((space = cap - items[i].size) >= 0)
        if ((t = knap(space) + items[i].val) > max) 
          max = t;
    return max;     
  }
