시리얼 넘버

시간 제한3초메모리 제한128 MB

요약
서로 다른 일련번호들과 정수 M이 주어질 때, 합이 M의 배수가 되는 가장 큰 부분집합의 크기를 구한다.
난이도

보통10점 중 7점

유형
동적 계획법, 정수론
정답자
아직 제출이 없습니다

문제

기타리스트 강토는 공연을 앞두고 있다. 그런데 무대에 오르기 직전, 강토의 기타가 다른 사람들의 기타와 뒤섞였고, 강토는 어떤 기타가 자기 것인지 잊어버렸다.

다행히 모든 기타에는 서로 다른(유일한) 시리얼 넘버가 붙어 있다. 강토는 자신이 원래 가지고 있던 기타들의 시리얼 넘버를 모두 더하면 그 합이 MM의 배수가 된다는 사실만 기억하고 있다.

무대 위에 놓인 모든 기타의 시리얼 넘버와 정수 MM이 주어질 때, 강토의 기타가 될 수 있는 기타 개수의 최댓값을 구하여라. 즉, 시리얼 넘버의 합이 MM의 배수가 되도록 기타들을 고를 때, 고를 수 있는 기타 개수의 최댓값을 출력하면 된다.

입력

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 다음과 같은 형식이다.

  • 첫째 줄: 기타의 개수 NN과 정수 MM. (1≤N≤5001 \le N \le 500, 1≤M≤100,0001 \le M \le 100{,}000)
  • 둘째 줄: 기타의 시리얼 넘버 S1,S2,…,SNS_1, S_2, \dots, S_N. (0≤Si≤100,0000 \le S_i \le 100{,}000, 모든 시리얼 넘버는 서로 다르다.)

출력

각 테스트 케이스마다, 시리얼 넘버의 합이 MM의 배수가 되도록 기타를 골랐을 때 고를 수 있는 기타 개수의 최댓값을 한 줄에 하나씩 출력한다.

입력으로는 항상 답이 존재하는 경우만 주어진다.

예제1

  1. 예제 1

    입력
    2
    3 5
    1 8 6
    6 9
    8 6 4 1 2 3
    
    예상 출력
    3
    5