#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; using cd = complex; constexpr ll mod = 1e9 + 7, maxn = 3e5 + 10; ll lgput(ll x, ll y, ll r) { return y == 0 ? r : lgput(x * x % mod, y / 2, y % 2 ? x * r % mod : r); } ll gcd(ll x, ll y) { return y == 0 ? x : gcd(y, x % y); } pair euclid_extins(ll x, ll y) { pair tmp; return x == 0 ? make_pair(0ll, 1ll) : (tmp = euclid_extins(y % x, x), swap(tmp.first, tmp.second), tmp.first -= tmp.second * (y / x), tmp); } ll inv_mod(ll x, ll mod) { return (euclid_extins(mod, x).second % mod + mod) % mod; } int n, m, a, b; vector bad; vector factors, dp; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m >> a >> b; bad.resize(m); for (auto& x : bad) cin >> x; for (int i = 1; i * i <= n; ++i) if (n % i == 0) { factors.push_back(i); factors.push_back(n / i); } sort(begin(factors), end(factors)); factors.erase(unique(begin(factors), end(factors)), end(factors)); dp.resize(factors.size(), (long long)1e9 * (long long)1e9 + 10); dp[0] = 0; for (int i = 0; i < factors.size(); ++i) { long long max_jmp = (ll)1e9 * (ll)1e9; for (auto b : bad) if (b % factors[i] == 0) max_jmp = min(max_jmp, (ll)b); for (int j = i + 1; j < factors.size(); ++j) { if (factors[j] >= max_jmp) break; if (factors[j] % factors[i]) continue; dp[j] = min(dp[j], dp[i] + (long long)a * (factors[j] / factors[i] - 1) + b); } } cout << (dp.back() > (ll)1e9 * (ll)1e9 ? -1 : dp.back() - b) << endl; }