inlineintrd(){ int x = 0, f = 1, c = getchar(); while (((c - '0') | ('9' - c)) < 0) f = c != '-', c = getchar(); while (((c - '0') | ('9' - c)) > 0) x = x * 10 + c - '0', c = getchar(); return f ? x : -x; }
using i64 = longlong; constint B = 2e5; constint N = 1 << 20; const i64 Mod = 1e9 + 7;
const i64 P = 998244353; const i64 G = 3; const i64 iG = 332748118; i64 fpow(i64 b, i64 p){ i64 res = 1; for (; p; b = b * b % P, p >>= 1) { if (p & 1) res = res * b % P; } return res; } namespace ntt { int lim, r[N]; intinit(int n){ lim = 1; while (lim < n) lim <<= 1; for (int i = 0; i < lim; i++) { r[i] = (r[i >> 1] >> 1) | ((i & 1) ? lim >> 1 : 0); } return lim; } voidrun(i64 *f, bool inv){ for (int i = 0; i < lim; i++) { if (i < r[i]) std::swap(f[i], f[r[i]]); } for (int mid = 1; mid < lim; mid *= 2) { i64 wn = fpow(inv ? iG : G, (P - 1) / (mid * 2)); for (int i = 0; i < lim; i += (mid * 2)) { i64 w = 1; for (int j = 0; j < mid; j++, w = w * wn % P) { i64 a = f[i + j], b = w * f[i + mid + j] % P; f[i + j] = (a + b) % P, f[i + mid + j] = (a - b + P) % P; } } } if (inv) { i64 il = fpow(lim, P - 2); for (int i = 0; i < lim; i++) f[i] = f[i] * il % P; } } };
intmain(){ l = rd(), t = rd(), n = rd(); for (int i = 1; i <= n; i++) a[i] = rd();
for (int i = 1; i <= B * 2; i++) { (dp[i] += ((t * i) / (2 * l)) % Mod) %= Mod; for (int j = i + i; j <= B * 2; j += i) { (dp[j] += Mod - dp[i]) %= Mod; } }
for (int i = 1; i <= n; i++) f[a[i]] = 1; for (int i = 1; i <= n; i++) g[-a[i] + B] = 1; int lim = ntt::init(B * 2); ntt::run(f, 0), ntt::run(g, 0); for (int i = 0; i < lim; i++) g[i] = g[i] * f[i] % P; for (int i = 0; i < lim; i++) f[i] = f[i] * f[i] % P; ntt::run(f, 1), ntt::run(g, 1); for (int i = 1; i <= n; i++) f[a[i] + a[i]]--; g[B] -= n; for (int i = 1; i <= B * 2; i++) { if (f[i]) flg[i] = 1; if (g[i]) flg[std::abs(i - B)] = 1; } for (int i = 1; i <= B * 2; i++) { for (int j = i + i; j <= B * 2; j += i) { flg[i] |= flg[j]; } }
i64 ans = 0; for (int i = 1; i <= B * 2; i++) { if (flg[i]) (ans += dp[i]) %= Mod; } printf("%lld\n", ans); return0; }