import java.util.*;
import java.io.*;

class Mod{
    static final long MOD = 1000_000_007;
    static final long[] fact = makeFactorialArray(110000);
    static final long[] factInv = makeInversedArray(fact);

    public static long add(long a, long b){
        long tmp = (a+b)%MOD;
        return tmp>=0 ? tmp : tmp+MOD;
    }
    public static long adds(long... a){
        long ans = 0;
        for(long x: a) ans = add(ans, x);
        return ans;
    }
    public static long sub(long a, long b){
        return add(a,-b);
    }
    public static long mult(long a, long b){
        long tmp = (a*b)%MOD;
        return tmp>=0 ? tmp : tmp+MOD;
    }
    public static long mults(long... a){
        long ans = 1;
        for(long x: a) ans = mult(ans, x);
        return ans;
    }
    public static long power(long a, long x){ //calculate a^x
        if(x<0)return 0;
        if(x==0)return 1;
        if(x%2==0) {
            long half = power(a,x/2);
            return mult(half,half);
        }
        return (a*power(a,x-1)) % MOD;
    }
    public static long inverse(long a){
        return power(a,MOD-2);
    }
    public static long div(long a, long b){
        return mult(a, inverse(b));
    }
    public static long[] makeFactorialArray(int size){
        long[] array = new long[size];
        array[0]=1;
        for(int i=1;i<size;i++){
            array[i]=mult(array[i-1],i);
        }
        return array;
    }
    public static long[] makeInversedArray(long[] original){
        long[] array = new long[original.length];
        for(int i=0;i<original.length;i++){
            array[i] = inverse(original[i]);
        }
        return array;
    }
    public static long combination(int n, int r){
        if(n<0 || r<0 || n<r) return 0;
        return mult(fact[n], mult(factInv[r],factInv[n-r]));
    }
    public static long gcd(long a, long b){
        if(a<b) return gcd(b,a);
        if(b==0) return a;
        if(a%b==0) return b;
        return gcd(b,a%b);
    }
    public static long lcm(long a, long b){
        return (a/gcd(a,b))*b;
    }

}

public class Main {

    static long[][] memory;

    public static long solve(int X, int[] S, int n){

        if(memory[X][n]>=0) return memory[X][n];

        //System.err.printf("? %6d %6d\n", X, n);
        if(n<=0){
            //System.err.printf("! %6d %6d %6d\n", X, n, X);
            return X;
        }
        if(n==1){
            //System.err.printf("! %6d %6d %6d\n", X, n, X%S[0]);
            return X%S[0];
        }
        long ans = 0L;
        for(int i=0; i<n; i++){
            ans = Mod.add(ans, Mod.mults(solve(X%S[i], S, i), Mod.fact[n-1], Mod.factInv[i]));
        }
        //System.err.printf("! %6d %6d %6d\n", X, n, ans);
        memory[X][n] = ans;
        return ans;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int X = sc.nextInt();

        int[] S = new int[N];
        for(int n=0; n<N; n++) S[n]=sc.nextInt();

        memory = new long[X+1][N+1];
        for(int x=0;x<=X;x++)for(int n=0;n<=N;n++)memory[x][n]=-1;

        Arrays.sort(S);
        System.out.println(solve(X, S, N));

    }
}


Measured memory_bytes: 435828