흔히들 생각하는 것과 달리, 성실함이 항상 보답받는 것은 아니다! 성실한 스탠퍼드 학부생으로 지내는 동안 David는 아무리 애를 써도 일이 늘 주어진 시간을 꽉 채우도록 불어난다는 사실을 깨달았다. 하루하루의 효율을 높이기 위해, David는 미루기의 기술을 배우기로 했다.
David에게는 다음 주까지 마쳐야 하는 과제가 n개 있다. i번째 과제를 처리하는 데는 xi만큼의 시간이 걸리며, 반드시 시각 ti까지 끝내야 한다. David는 한 번에 하나의 과제만 처리할 수 있고, 한 과제를 시작하면 그 과제를 끝낼 때까지 계속 처리해야 한다(도중에 다른 과제로 바꿀 수 없다). 모든 마감을 지키면서 David가 과제 처리를 시작할 수 있는 가장 늦은 시각은 언제인가?
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 세 줄로 구성된다. 첫째 줄에는 정수 n (1≤n≤1000)이 주어진다. 둘째 줄에는 n개의 정수 x1 x2 … xn (1≤xi≤10)이 공백 하나로 구분되어 주어진다. 셋째 줄에는 n개의 정수 t1 t2 … tn (1≤ti≤1000)이 공백 하나로 구분되어 주어진다.
연속한 테스트 케이스 사이는 빈 줄로 구분된다. 정수 0 하나만 있는 줄은 입력의 끝을 의미하며, 이 경우는 처리하지 않는다.
각 테스트 케이스마다, David가 모든 과제를 제때 끝낼 수 있도록 처리를 시작할 수 있는 가장 늦은 시각을 정수 하나로 한 줄에 출력한다. 이 가장 늦은 시작 시각이 시각 0보다 이전이어야만 한다면(즉 음수라면) 대신 impossible을 출력한다.