$N$명의 선수가 0번 팀과 1번 팀으로 나누어 대결을 한다. $i(1\le i\le N)$번 선수는 $A_i$번 팀에 속해있으며, 능력치는 $B_i$이다. (단, $A_i$는 0 또는 1)
대결의 진행자인 당신은 대결을 여러 라운드에 걸쳐 진행하려고 한다. 당신은 $1$개 이상 $N$개 이하의 라운드를 자유롭게 만든 뒤, 아래 규칙에 따라 라운드에 참가할 선수를 선택해야 한다.
예를 들어, $(1,2) ,(3) ,(4,5)$와 같이 라운드를 구성할 수 있지만, $(1,3) ,(2,4,5)$와 같이 불연속적인 번호의 선수들로 라운드를 구성하거나, $(1,2,3) ,(3,4)$와 같이 한 선수가 0개 또는 2개 이상의 라운드에 참가하도록 라운드를 구성할 수 없다.
대결에서 각 팀의 점수는 다음과 같이 계산한다.
예를 들어, $A=[1,1,0,0,1]$, $B=[1,2,3,4,5]$이고, 라운드를 $(1,2) ,(3) ,(4,5)$로 구성했다고 하자. 0번 팀은 2 라운드에서 $3\times 2=6$점, 3 라운드에서 $4\times 3=12$점을 획득해서 최종 점수는 18점이고, 1번 팀은 1 라운드에서 $(1+2)\times 1=3$, 3 라운드에서 $5\times 3=15$점을 획득해 최종 점수는 18점이다.
1번 팀의 열렬한 팬인 당신은 1번 팀의 최종 점수에서 0번 팀의 최종 점수를 뺀 값 $S$를 최대화하려고 한다. 만약 $S$를 최대화하는 라운드 구성 방법이 여러가지라면, 라운드 개수 $M$이 최소가 되도록 라운드를 구성해야 한다.
만들 수 있는 최대 점수 차이 $S$와, 이를 달성하기 위한 가장 적은 라운드의 개수 $M$을 구하는 프로그램을 작성해 보자.
첫째 줄에 선수의 수를 의미하는 정수 $N$이 주어진다.
둘째 줄에 각 선수의 소속 팀을 나타내는 $N$개의 정수 $A_1,A_2,\cdots ,A_N$ 이 공백으로 구분되어 주어진다.
셋째 줄에 각 선수의 능력치를 나타내는 $N$개의 정수 $B_1,B_2,\cdots ,B_N$ 이 공백으로 구분되어 주어진다.
1번 팀의 최종 점수에서 0번 팀의 최종 점수를 뺀 값이 최대가 되도록 하는 최소 라운드 개수 $M$과 그때의 최대 점수 차 $S$를 공백으로 구분해서 출력한다.
정답이 32비트 정수 범위를 넘을 수 있으므로, C/C++에서는 long long, Java에서는 long과 같은 자료형을 사용하는 것을 권장한다.