Go: package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

var scanner = bufio.NewScanner(os.Stdin)

func main() {
	for scanner.Scan() {
		buf := strings.Split(scanner.Text(), " ")
		if buf[0] == "0" {
			break
		}
		q1, _ := strconv.Atoi(buf[0]) // 買うべき鶏肉の量の下限(g)
		b, _ := strconv.Atoi(buf[1])  // 予算
		c1, _ := strconv.Atoi(buf[2]) // 会津地鶏の値段(/100g)
		c2, _ := strconv.Atoi(buf[3]) // 普通の鶏肉の値段(/100g)
		q2, _ := strconv.Atoi(buf[4]) // 会津地鶏の買える量の上限(g)
		maxAizuChiken := min(b/c1, q2)
		if maxAizuChiken <= 0 {
			fmt.Println("NA")
			continue
		}
		if c2 >= c1 {
			maxNormalChiken := (b - maxAizuChiken*c1) / c2
			if maxAizuChiken+maxNormalChiken < q1 { // 買い切ったけども必要な鶏肉の下限に達しなかった
				fmt.Println("NA")
			} else {
				fmt.Println(maxAizuChiken, maxNormalChiken)
			}
			continue
		}
		if (b-c1)/c2+1 < q1 { // 会津地鶏を1単位+普通の鶏肉を予算目一杯買ったが買うべき下限を超えなかった
			fmt.Println("NA")
			continue
		}
		// 二分探索
		low, high := 0, maxAizuChiken+1
		for high-low > 1 {
			mid := (low + high) / 2
			if check(mid, b, c1, c2, q1) {
				low = mid
			} else {
				high = mid
			}
		}
		fmt.Println(low, (b-low*c1)/c2)
	}
}

func check(mid, b, c1, c2, q1 int) bool {
	if mid+(b-mid*c1)/c2 < q1 {
		return false
	}
	return true
}

func min(a, b int) int {
	if a > b {
		return b
	}
	return a
}

C++: #include<iostream>

using namespace std;

int main(){
	int q_lower,bud,c_aizu,c_normal,q_aizuupper;
	while(cin>>q_lower>>bud>>c_aizu>>c_normal>>q_aizuupper){
		int q_aizu=0,q_normal=0;
		q_aizu+=q_aizuupper;
		bud-=q_aizu*c_aizu;
		if(bud<0){
			while(bud<0){
				q_aizu--;
				bud+=c_aizu;
			}
			if(q_aizu<=0){
				cout<<"NA"<<endl;
				continue;
			}
		}
		q_normal+=bud/c_normal;
		bud-=q_normal*c_normal;

		while(q_aizu+q_normal<q_lower && q_aizu>0){
			q_aizu--;
			bud+=c_aizu;
			q_normal+=bud/c_normal;
			bud-=(bud/c_normal)*c_normal;
		}
		if(q_aizu<=0){
			cout<<"NA"<<endl;
			continue;
		}
		if(q_aizu+q_normal>=q_lower)	cout<<q_aizu<<' '<<q_normal<<endl;
		else	cout<<"NA"<<endl;
	}

	return 0;
}

C++: #include <iostream>
#include <iomanip>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <bitset>
#include <stack>
#include <utility>
#include <numeric>
#include <algorithm>
#include <functional>
#include <complex>
#include <string>
#include <sstream>

#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <cstring>

using namespace std;

#define all(c) c.begin(),c.end()
#define rep(i,n) for(int i=0;i<(int)n;i++)
#define debug(x) cerr << #x << " = " << (x) << " (L" << __LINE__ << ")" << endl

typedef long long ll;
typedef vector<int> vi;

template<typename T>
ostream& operator<<(ostream& os,const vector<T>& val){
    os << "[ ";
    for(typename vector<T>::const_iterator it=val.begin();
        it != val.end();++it){
        os << *it << " ";
    }
    os << "]";
    return os;
}
// 買うべき鶏肉の量の下限 q1、予算 b、このお肉屋さんでの会津地鶏100グラムの値段 c1、ふつう の鶏肉100グラムの値段 c2、
// 会津地鶏を一人が買える量の上限 q2 を入力とし、一郎君が買う会津地 鶏とふつうの鶏肉の量を100グラム単位で出力するプログラムを作成してください。
// ただし、このお 肉屋さんではお母さんの指示通りに買えない場合には、「NA」と出力してください。
string solve(ll q1,ll b,ll c1,ll c2,ll q2){
    ll low = 1;
    ll high = q2+1;
    for(int k=0;k<100;k++){
       // for(int k=0;k<3;k++){
        ll mid = (low + high) / 2;
         // debug(low);
         // debug(mid);
         // debug(high);
        ll rest = q1 - mid;
        ll need = mid * c1;
        if(rest > 0){
            need += rest * c2;
        }
        if(need <= b){
            low = mid;
        }else{
            high = mid;
        }
    }
    if(low == 1){
        ll rest = q1 - low;
        ll need = low * c1;
        if(rest > 0){
            need += rest * c2;
        }
        if(need > b){
            return "NA";
        }
    }
    stringstream ss;
    ss << low << " " << (b - low*c1) / c2;
    return ss.str();
}
int main(){
    while(true){
        ll q1,b,c1,c2,q2;
        cin >> q1;
        if(q1 == 0) break;
        cin >> b >> c1 >> c2 >> q2;
        cout << solve(q1,b,c1,c2,q2) << endl;
    }
    return 0;
}

C++: #define _USE_MATH_DEFINES
#include <iostream>
#include <complex>
#include <algorithm>
#include <vector>
#include <stack>
#include <string>
#include <queue>
#include <cmath>
#include <math.h>
#include <numeric>
#include <list>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <climits>
#include <set>
#include <memory.h>
#include <memory>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <cassert>
#include <map>
#include <cassert>
#include <time.h>
#include <ctime>

using namespace std;

typedef complex<double> xy_t;
typedef pair<xy_t, xy_t> line;
typedef long long ll;
typedef pair<int, int> P;
typedef pair<int , P> PP;
typedef pair<int, string> Ps;
typedef vector<int> vec;
typedef vector<vec> mat;
const int INF = 1 << 30;
const double EPS = 1e-9;
const double PI = 3.1415926535897932384626433832795;
const int CLK = CLOCKS_PER_SEC;

#define rep(i, n) for(int i = 0; i < n; i++)
#define rep2(i, m, n) for(int i = m; i < n; i++)

int main(){
	int q1, b, c1, c2, q2;
	while(cin >> q1 && q1){
		cin >> b >> c1 >> c2 >> q2;
		int m = min(q2, b / c1);
		//cout << m << endl;
		int res[2] = {0, 0};
		rep2(i, 1, m + 1){
			int p2 = (b - i * c1) / c2;
			//cout << i << " " << p2 << endl;
			if(i + p2 >= q1){
				res[0] = i;
				res[1] = p2;
			}
		}
		if(res[0] == 0) cout << "NA" << endl;
		else cout << res[0] << " " << res[1] << endl;
	}
	return 0;
}

C++: #include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define rep(i,n) for(int i=0;i<n;i++)

int main(){
	int n;
	while(cin >> n , n){
		int need , ans = 0;
		vector<int> d(n);
		rep(i,n) cin >> d[i];
		
		cin >> need;
		int l = 0 , r = n-1;
		while( l < r ){
			ans++;
			int m = (l+r)/2;
			if(d[m] > need) r = m-1;
			else if(d[m] < need) l = m+1;
			else {ans--;break;}
		}
		cout << ans+1 << endl;
	}
}

C++: #include <iostream>
#include <string>
#include <vector>
#include <algorithm>

#define REP(i,k,n) for(int i=k;i<n;i++)
#define rep(i,n) for(int i=0;i<n;i++)

using namespace std;

int main()
{
	int q1,b,c1,c2,q2;
	while(cin >> q1 && q1)
	{
		cin >> b >> c1 >> c2 >> q2;
		

		if(c1 + c2 * (q1 - 1) > b) cout << "NA" << endl;
		else
		{
			int cnt = 1,cnt_2 = q1 - 1,res = c1 + c2 * (q1 - 1);
			bool flag = false;

			while(res < b)
			{
				if(cnt_2 < 0) 
				{
					flag = true;
					break;
				}

				if(cnt <= q2)
				{
					res += c1 - c2;
					cnt++;
					cnt_2--;
				}
				else break;
			}

			cnt--;
			cnt_2++;
			res -= c1 - c2;

			
			if(cnt == q2)
			{
				cnt_2 += (b-res)/c2;
			}

			if(flag)
			{
				while(cnt <= q2 && res <= b)
				{
					cnt++;
					res += c1;
				}
				cnt--;
				res -= c1;

				if(cnt == q2)
				{
					cnt_2 += (b-res)/c2;
				}
			}

			if(cnt == 0)
			{
				cnt++;
				cnt_2--;
			}

			cout << cnt << " " << cnt_2 << endl;
		}

	}
	return 0;
}

C++: #include <iostream>
#include <algorithm>
using namespace std;
int main() {
  while(true) {
    int q1; cin >> q1;
    if(q1 == 0) break;
    int b, c1, c2, q2; cin >> b >> c1 >> c2 >> q2;
    int ansX = -1, ansY;
    for(int x = 1; x <= q2 && x*c1 <= b; ++x) {
      int y = (b - x * c1) / c2;
      if(x + y >= q1) {
        ansX = x;
        ansY = y;
      }
    }
    if(ansX == -1) cout << "NA" << endl;
    else cout << ansX << ' ' << ansY << endl;
  }
}

C++: #include<iostream>
using namespace std;

int q1,q2,b,c1,c2,ans1,ans2;

bool solve(){
	if(!q2)
		return false;
	ans1 = q2;
	ans2 = 0;
	while(ans1*c1 + ans2*c2 <= b)
		ans2++;
	if(ans2)
		ans2--;
	if(ans1 + ans2 >= q1 && ans1*c1 + ans2*c2 <= b)
		return true;
	while(true){
		ans1--;
		if(!ans1)
			return false;
		while(true){
			ans2++;
			if(ans1*c1 + ans2*c2 > b){
				ans2--;
				break;
			}
		}
		if(ans1*c1 + ans2*c2 <= b && ans1 + ans2 >= q1)
			return true;
	}
}

int main(){
	while(true){
		cin >> q1;
		if(!q1)
			return 0;
		cin >> b >> c1 >> c2 >> q2;
		if(solve())
			cout << ans1 << ' ' << ans2 << endl;
		else
			cout << "NA" << endl;
	}
}