#include #include #include #include #include #include #include #include using namespace std; #define FOR(i,a,b) for (int i = (a); i < (b); ++i) const double EPS = 1e-9; char temp[100]; void read(vector > & coins) { double d; while (1) { scanf("%lf ", &d); if ((int)d == -1) break; scanf("%s ", temp); int len = strlen(temp); int num = 0; FOR(i, 0, len-1) num = num * 10 + temp[i] - '0'; if (num) coins.push_back(make_pair((int)(d * 100.0 + EPS), num)); } } int main() { while (1) { double d; scanf("%lf ", &d); if ((int)d == -1) break; int target = d * 100.0 + EPS; vector > c1, c2; read(c1); read(c2); int m = 0; FOR(i, 0, c1.size()) m = max(m, c1[i].second); FOR(i, 0, c2.size()) m = max(m, c2[i].second); int res = -1; set old, active; old.insert(0); FOR(step, 0, m+1) { for (set::iterator iter = old.begin(); iter != old.end(); ++iter) { //cout << *iter << " "; FOR(i, 0, c1.size()) { active.insert(*iter + c1[i].first); if (*iter + c1[i].first == target) res = step+1; if (--c1[i].second == 0) c1.erase(c1.begin() + i--); } FOR(i, 0, c2.size()) { active.insert(*iter - c2[i].first); if (*iter - c2[i].first == target) res = step+1; if (--c2[i].second == 0) c2.erase(c2.begin() + i--); } } //cout << endl; if (res != -1) break; active.swap(old); active.clear(); } if (res == -1) printf("The payment is impossible.\n"); else printf("%d tenders must be exchanged.\n", res); } return 0; }