타로의 장보기

시간 제한2초메모리 제한512 MB

요약
물건 가격과 예산이 주어질 때, 서로 다른 두 물건의 합 중 예산을 넘지 않는 가장 큰 값을 구한다.
난이도

보통10점 중 4점

유형
투 포인터, 정렬, 배열
정답자
아직 제출이 없습니다

문제

엄마는 타로에게 처음으로 장을 보게 하기로 했다. 카탈로그에 실린 물건 중에서 마음에 드는 것 두 개를 고르라고 했지만, 물건이 하나같이 탐나서 타로는 두 개를 정하지 못한다. 그래서 엄마가 허락한 금액을 넘지 않으면서 가격의 합이 가장 큰 두 물건을 사기로 했다. 똑같은 물건을 두 개 사면 재미가 없으니 서로 다른 물건 두 개를 고른다.

타로가 물건 두 개를 고르도록 도와라. 모든 물건의 가격 목록이 주어진다. 목록에서 물건 두 개를 고르는 모든 경우 중에서 가격의 합이 허락된 금액을 넘지 않으면서 가장 큰 경우를 찾아 그 합을 구하라. 타로가 사는 물건은 정확히 두 개다. 하나도 아니고 셋 이상도 아니다. 목록에는 가격이 같은 물건이 둘 이상 있기도 하다.

입력

입력은 여러 개의 데이터 집합으로 이루어지며, 각 데이터 집합의 형식은 다음과 같다.

n m
a1 a2 ... an

데이터 집합 하나는 두 줄이다. 첫째 줄에는 물건의 개수 nn과 지불할 수 있는 최대 금액 mm이 주어진다. nn은 2 이상 1,000 이하의 정수이고, mm은 2 이상 2,000,000 이하의 정수다. 둘째 줄에는 물건 nn개의 가격이 주어진다. aia_i (1 ≤ ii ≤ nn)는 ii번째 물건의 가격이며, 1 이상 1,000,000 이하의 정수다.

입력의 끝은 0 두 개가 적힌 줄로 표시한다. 모든 데이터 집합의 nn을 더한 값은 50,000을 넘지 않는다.

출력

각 데이터 집합마다 가격의 합이 허락된 금액 mm을 넘지 않는 물건 쌍 중에서 합이 가장 큰 값을 한 줄에 출력한다. 어떤 물건 쌍을 골라도 가격의 합이 mm을 넘으면 그 값 대신 NONE을 출력한다.

예제5

  1. 예제 1

    입력
    3 45
    10 20 30
    6 10
    1 2 5 8 9 11
    7 100
    11 34 83 47 59 29 70
    4 100
    80 70 60 50
    4 20
    10 5 10 16
    0 0
    
    예상 출력
    40
    10
    99
    NONE
    20
    
  2. 예제 2

    입력
    2 2
    1 1
    2 2
    1 2
    0 0
    
    예상 출력
    2
    NONE
    
  3. 예제 3

    입력
    2 2000000
    1000000 1000000
    2 1999999
    1000000 1000000
    0 0
    
    예상 출력
    2000000
    NONE
    
  4. 예제 4

    입력
    5 20
    10 10 10 10 10
    5 19
    10 10 10 10 10
    0 0
    
    예상 출력
    20
    NONE
    
  5. 예제 5

    입력
    6 15
    1 3 7 8 12 14
    6 13
    14 12 8 7 3 1
    6 2
    1 1 1 1 1 1
    0 0
    
    예상 출력
    15
    13
    2