#include int main(void) { int y10,y50,y100,y500; int c10,c50,c100,c500; int m10,m50,m100,m500; int min10,min50,min100,min500; int m,i,j,k,l,harau,oturi,mai,min; while(1){ scanf("%d", &m); if(m==0) break; scanf("%d %d %d %d",&y10, &y50, &y100, &y500); min=20*4; // 最小枚数を調べる。初期値は最大で各硬貨20枚なのでこの 様に設定 min10=min50=min100=min500=0; // 全ての場合について調べる for(i=0; i<=y10; i++){ // 10円 for(j=0; j<=y50; j++){ // 50円 for(k=0; k<=y100; k++){ // 100円 for(l=0; l<=y500; l++){ // 500円 harau=i*10+j*50+k*100+l*500; // 払うお金 oturi=harau-m; // お釣 if(oturi<0) continue; // おつりがマイナスなら次の場合 // おつりの枚数を求める c500=oturi/500; c100=(oturi%500)/100; c50 =(oturi%100)/50; c10 =(oturi%50)/10; // 支払後の手持の枚数を求める m10=y10-i+c10; m50=y50-j+c50; m100=y100-k+c100; m500=y500-l+c500; mai=m10+m50+m100+m500; // 最小の場合更新 if(min>mai){ min=mai; min10=i; min50=j; min100=k; min500=l; } } } } } if(min10>0){ printf("10 %d\n", min10); } if(min50>0){ printf("50 %d\n", min50); } if(min100>0){ printf("100 %d\n", min100); } if(min500>0){ printf("500 %d\n", min500); } printf("\n"); } return 0; }