#include<iostream>
#include<cstring>
#include<climits>
using namespace std;
struct drink{
int c;
int l;
}d[505];
int dp[4005],sum=0;
int main(){
int N,L;
cin>>N>>L;
for(int i=1;i<=N;i++){
cin>>d[i].c>>d[i].l;
d[i].l=min(d[i].l,L);
sum+=d[i].l;
}
if(sum<L){
cout<<"no solution";
return 0;
}
memset(dp,127,sizeof(dp));
for(int i=1;i<=N;i++){
for(int j=2*L;j>=d[i].l;j--){
dp[j]=min(dp[j],dp[j-d[i].l]+d[i].c);
}
}
int ans=INT_MAX;
for(int i=L;i<=2*L;i++){
ans=min(ans,dp[i]);
}
cout<<ans;
}