广告位招租中
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

你得到一个长度为\ n\的数组,你需要选择\ k\个数组中的数字(不能重复选择一个位置),使这\ k\个数字的最大公约数不小于\ m\
请问你能够找到的最大的\ k\是多少,以及此时的最大公约数的值(若\ k\相同则使最大公约数最小)。

输入描述:

第一行包含两个整数\ n,m\ \ (1\leq n,m\leq 2*10^5)
第二行包含\ n\个由空格分隔的整数,\ a_i\表示数组中第\ i\个元素的值\ (1 \leq a_i \leq 2*10^5)

输出描述:

输出一行,包括两个由空格分隔的整数,表示能够找到最大的\ k \以及此时的最大公约数(\ k\相同时输出最小的最大公约数)
特别的,若\ k=0\,则输出 0 0
示例1

输入

复制
4 3
8 9 6 4

输出

复制
2 3

说明

gcd(8,4)=4,gcd(9,6)=3\ k\都等于2,此时选择\ gcd\更小的 3
示例2

输入

复制
3 12
4 6 9

输出

复制
0 0

说明

没有任何组合可以使\ gcd\不小于12,故答案为 0 0

备注:

最大公约数即每个由所选数字的因数构成的集合的交集当中最大的元素