from collections import deque def main(): import sys input = sys.stdin.read().split() idx = 0 A1000 = int(input[idx]); idx +=1 A100 = int(input[idx]); idx +=1 A1 = int(input[idx]); idx +=1 Db = int(input[idx]); idx +=1 B1000 = int(input[idx]); idx +=1 B100 = int(input[idx]); idx +=1 B1 = int(input[idx]); idx +=1 Dc = int(input[idx]); idx +=1 C1000 = int(input[idx]); idx +=1 C100 = int(input[idx]); idx +=1 C1 = int(input[idx]); idx +=1 queue = deque() initial_state = (A1000, A100, A1) queue.append( (A1000, A100, A1, 0) ) visited = set() visited.add( (A1000, A100, A1) ) max_steps = 0 while queue: a1000, a100, a1, steps = queue.popleft() if steps > max_steps: max_steps = steps # Try B transaction max_x_b = min(a1000, Db // 1000) for x in range(max_x_b + 1): rem_x = Db - x * 1000 if rem_x < 0: continue max_y_b = min(a100, rem_x // 100) for y in range(max_y_b + 1): rem_y = rem_x - y * 100 if rem_y < 0: continue if a1 >= rem_y: new_a1000 = a1000 - x + B1000 new_a100 = a100 - y + B100 new_a1 = a1 - rem_y + B1 new_state = (new_a1000, new_a100, new_a1) if new_state not in visited: visited.add(new_state) queue.append( (new_a1000, new_a100, new_a1, steps + 1) ) # Try C transaction max_x_c = min(a1000, Dc // 1000) for x in range(max_x_c + 1): rem_x = Dc - x * 1000 if rem_x < 0: continue max_y_c = min(a100, rem_x // 100) for y in range(max_y_c + 1): rem_y = rem_x - y * 100 if rem_y < 0: continue if a1 >= rem_y: new_a1000 = a1000 - x + C1000 new_a100 = a100 - y + C100 new_a1 = a1 - rem_y + C1 new_state = (new_a1000, new_a100, new_a1) if new_state not in visited: visited.add(new_state) queue.append( (new_a1000, new_a100, new_a1, steps + 1) ) print(max_steps) if __name__ == "__main__": main()