#include <stdio.h>
#define G_MAX 1000
#define W_MAX 5000
int e[ G_MAX ], c[ G_MAX ], rucs[ W_MAX + 1 ];
int min ( int a, int b ){
if ( a < b ) return a;
return b;
}
int trans ( int a ){
if ( a < 0 ) return 0;
return a;
}
int main()
{
FILE *in = fopen ( "energii.in", "r" );
int g, w;
fscanf ( in, "%d%d", &g, &w );
int i;
for ( i = 0; i < g; i++ ){
fscanf ( in, "%d%d", &e[ i ], &c[ i ] );
}
fclose ( in );
rucs[ 0 ] = 1;
int j;
for ( i = 0; i < g; i++ ){
for ( j = w; j > 0; j-- ){
if ( rucs[ trans( j - e[ i ] ) ] != 0 ){
if ( rucs[ j ] != 0 ) rucs[ j ] = min( c[ i ] + rucs[ trans( j - e[ i ] ) ], rucs[ j ] );
else rucs[ j ] = c[ i ] + rucs[ trans( j - e[ i ] ) ];
}
}
}
FILE *out = fopen ( "energii.out", "w" );
if ( rucs[ w ] > 0 ) fprintf ( out, "%d", rucs[ w ] - 1 );
else fprintf ( out, "-1" );
fclose ( out );
return 0;
}