#include <bits/stdc++.h>
using namespace std;
int cache[ 10000 ] [ 1000 ] ;
int dp( int A, vector< int > & B,int i)
{
if ( A== 0 )
return 0 ;
if ( i== B.size ( ) )
{
if ( A>= 0 )
return 0 ;
return INT_MIN ;
}
if ( cache[ A] [ i] ! = - 1 )
{
return cache[ A] [ i] ;
}
int ans= dp( A,B,i+ 1 ) ;
if ( B[ i] > A)
{
ans= max( ans,0 ) ;
}
else
ans= max( ans,dp( A- B[ i] ,B,i) + 1 ) ;
cache[ A] [ i] = ans;
return ans;
}
void print( int A, vector< int > & B,int i, vector< int > & ans)
{
if ( i== B.size ( ) ) return ;
if ( B[ i] <= A && ( dp( A- B[ i] ,B,i) + 1 ) == cache[ A] [ i] )
{
ans.push_back ( i) ;
print( A- B[ i] ,B,i,ans) ;
}
else
{
print( A,B,i+ 1 ,ans) ;
}
}
vector< int > solve( int A, vector< int > & B) {
memset ( cache,- 1 ,sizeof ( cache) ) ;
vector< int > ans;
dp( A,B,0 ) ;
print( A,B,0 ,ans) ;
return ans;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBjYWNoZVsxMDAwMF1bMTAwMF07CmludCBkcChpbnQgQSwgdmVjdG9yPGludD4gJkIsaW50IGkpCnsKICAgIGlmKEE9PTApCiAgICAgICAgcmV0dXJuIDA7CgogICAgaWYoaT09Qi5zaXplKCkpCiAgICB7CiAgICAgICAgaWYoQT49MCkKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgcmV0dXJuIElOVF9NSU47CiAgICB9CiAgICBpZihjYWNoZVtBXVtpXSE9LTEpCiAgICB7CiAgICAgICAgcmV0dXJuIGNhY2hlW0FdW2ldOwogICAgfQogICAgaW50IGFucz1kcChBLEIsaSsxKTsKICAgIGlmKEJbaV0+QSkKICAgIHsKICAgICAgICBhbnM9bWF4KGFucywwKTsKICAgIH0KICAgIGVsc2UKICAgICAgICBhbnM9bWF4KGFucyxkcChBLUJbaV0sQixpKSsxKTsKICAgIGNhY2hlW0FdW2ldPWFuczsKICAgIHJldHVybiBhbnM7Cn0Kdm9pZCBwcmludChpbnQgQSwgdmVjdG9yPGludD4gJkIsaW50IGksIHZlY3RvcjxpbnQ+ICZhbnMpCnsKICAgIGlmKGk9PUIuc2l6ZSgpKSByZXR1cm47CgogICAgaWYoQltpXTw9QSAmJiAoZHAoQS1CW2ldLEIsaSkrMSk9PWNhY2hlW0FdW2ldKQogICAgewogICAgICAgIGFucy5wdXNoX2JhY2soaSk7CiAgICAgICAgcHJpbnQoQS1CW2ldLEIsaSxhbnMpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIHByaW50KEEsQixpKzEsYW5zKTsKICAgIH0KfQoKdmVjdG9yPGludD4gc29sdmUoaW50IEEsIHZlY3RvcjxpbnQ+ICZCKSB7CiAgICBtZW1zZXQoY2FjaGUsLTEsc2l6ZW9mKGNhY2hlKSk7CiAgICB2ZWN0b3I8aW50PiBhbnM7CiAgICBkcChBLEIsMCk7CiAgICBwcmludChBLEIsMCxhbnMpOwogICAgcmV0dXJuIGFuczsKfQo=