import java.util.Scanner; public class DFS { static int max = -1; // 记录最大值 static int n, k; static int[] num = new int[100010]; static int[] mark = new int[4]; // 记录每一步存储的数字 static boolean[] flag = new boolean[100010]; // 给num一个标记位 是否被使用过 static Scanner sc = new Scanner(System.in); public static void main(String[] args) { n = sc.nextInt(); k = sc.nextInt(); for (int i = 0; i < n; i++) { num[i] = sc.nextInt(); } dfs(0); System.out.println(max); } // 使用深搜 public static void dfs(int step) { // 判断结束条件 if (step == 3) { int temp = mark[0] + mark[1] + mark[2]; if (temp % k == 0) { max = Math.max(max, temp); return; } } for (int i = 0; i < n; i++) { if (!flag[i]) { // 如果i还没有被记录过 flag[i] = true; // 给 这个数字设置标志位 mark[step] = num[i]; // 在mark中存储 这一位数字 dfs(step + 1); flag[i] = false; // 循环结束 释放标记位 } } } }