만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

최대공약수 합의 최댓값

시간 제한1초메모리 제한1024 MB

요약
순서가 정해진 옷 더미를 연속된 구간으로 나누어 각 선반에 D개 이상 놓고, 선반별 최대공약수의 합이 최대가 되도록 구하는 문제입니다.
난이도

어려움10점 중 8점

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

문제

Bit의 옷장에는 프로그래밍 대회 T셔츠가 많이 있다. 셔츠는 높이가 서로 다른 더미로 여러 선반에 쌓여 있다.

Bit은 어릴 때부터 최대공약수가 들어가는 게임을 좋아했다. 그래서 각 선반에 있는 더미의 셔츠 수에 대해 최대공약수를 구하고, 그 값을 모두 더했을 때 합이 최대가 되도록 셔츠를 배치하려고 한다.

예를 들어 첫 번째 선반에 6장짜리 더미와 9장짜리 더미가 있고, 두 번째 선반에 2장짜리 더미 하나가 있고, 세 번째 선반에 5장, 6장, 7장짜리 더미가 있다고 하자. 이때 구하는 합은 gcd⁡(6,9)+gcd⁡(2)+gcd⁡(5,6,7)=3+2+1=6\gcd(6, 9) + \gcd(2) + \gcd(5, 6, 7) = 3 + 2 + 1 = 6이다.

모든 더미를 서로 다른 선반에 하나씩 놓으면 합이 최대가 된다는 것을 Bit도 바로 알아챘다. 하지만 게임을 더 재미있게 하려고 빈 선반이 아닌 선반에는 더미가 최소 DD개 있어야 한다는 조건을 정했다. 빈 선반의 최대공약수는 00이다.

Bit은 셔츠의 순서를 크게 바꾸고 싶지 않다. 그래서 더미는 다음 규칙에 따라서만 옮긴다.

  • 선반의 가장 오른쪽 더미를 바로 아래 선반의 가장 왼쪽으로 옮길 수 있다. 가장 아래 선반은 제외한다.
  • 선반의 가장 왼쪽 더미를 바로 위 선반의 가장 오른쪽으로 옮길 수 있다. 가장 위 선반은 제외한다.

시간이 충분하고 더미를 선반 사이에서 몇 번이든 옮길 수 있을 때, Bit이 얻을 수 있는 최대공약수 합의 최댓값을 구하는 프로그램을 작성하라.

입력

첫 줄에 선반 수 NN, 더미의 총수 MM, 빈 선반이 아닌 선반에 있어야 하는 더미 수의 최솟값 DD가 주어진다. (1≤D≤M≤N≤500 0001 \le D \le M \le N \le 500\,000)

다음 NN개 줄에 선반 정보가 위에서 아래 순서로 주어진다. 각 줄은 선반의 더미 수 KiK_i (0≤Ki≤M0 \le K_i \le M)로 시작하고, 이어서 왼쪽에서 오른쪽 순서로 정수 KiK_i개 Xi,jX_{i,j} (1≤Xi,j≤1091 \le X_{i,j} \le 10^9)가 주어진다. Xi,jX_{i,j}는 그 더미에 있는 셔츠의 수이다.

출력

얻을 수 있는 최대공약수 합의 최댓값을 한 줄에 정수로 출력한다.

예제2

  1. 예제 1

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

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