Điều hướng chính

Ngôn ngữ

Phím tắt

/
Chuyển đến ô tìm bài
g p
Đi đến bài tập
g c
Đi đến kỳ thi
g u
Đi đến người dùng
?
Mở trợ giúp phím tắt

Dãy con

Dễ Duyệt phân tập

  • 100 Điểm
  • 0% Tỉ lệ AC
  • 0 Số AC
  • 256M Bộ nhớ giới hạn
  • 1.0s Giới hạn thời gian

Trí tuệ nhân tạo của công ty AI Cơm Gà vừa phát hiện ra một thuật toán có thể chọn ra một dãy con cực kỳ hiệu quả để tiêu hóa dữ liệu. Để kiểm nghiệm khả năng đó, bạn được giao một nhiệm vụ sau:

Bạn có một dãy số nguyên $a$ gồm $n$ phần tử. Ngoài ra, bạn còn có một số nguyên $m$. Nhiệm vụ của bạn là chọn ra một **dãy con** (không nhất thiết liên tiếp) các chỉ số $b_1, b_2, \ldots, b_k$ ($1 \le b_1 < b_2 < \ldots < b_k \le n$), sao cho:

\begincenter
\(( \sum_{i=1}^{k} a_{b_i} ) \bmod m\)
\endcenter

đạt giá trị lớn nhất có thể. Nói cách khác, chọn một dãy con sao cho giá trị số dư của tổng chia cho $m$ là lớn nhất. Lưu ý rằng bạn được phép không chọn phần tử nào (khi đó tổng bằng 0).

Input

  • Dòng đầu tiên chứa hai số nguyên \(n\) và \(m\) (\(1 \le n \le 40\), \(1 \le m \le 10^9\)) --- số lượng phần tử trong dãy và số chia lấy dư.
  • Dòng thứ hai chứa \(n\) số nguyên \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) --- các phần tử trong dãy.

Output

In ra một số nguyên --- giá trị lớn nhất có thể của:

\begincenter
\(( \sum_{i=1}^{k} a_{b_i} ) \bmod m\)
\endcenter

Example

Test 1

Input
4 4
5 2 4 1
Output
3
Note
  • Có \(30\%\) số điểm có \(n \leq 10\).
  • Có \(30\%\) số điểm có \(n \leq 20\).
  • \(40\%\) số điểm không có ràng buộc gì thêm.

Test 2

Input
3 20
199 41 299
Output
19

Bình luận

Chưa có bình luận nào.