#include using namespace std; #define int long long #define M 1000000007 template class ModInt { int64_t value; public: // constructor inline ModInt(int64_t val = 0) noexcept : value((val >= MOD) ? (val % MOD) : (val < 0) ? ((val + MOD) % MOD) : val) {} // プリミティブ整数型へのキャスト (型の明示:必要) template explicit inline operator Int() const noexcept { return static_cast(value); } inline ModInt inv() const noexcept { return ModInt::pow(value, MOD-2); } inline ModInt& operator+=(ModInt x) noexcept { if ((value += x.value) >= MOD) value -= MOD; return *this; } inline ModInt& operator-=(ModInt x) noexcept { if ((value -= x.value) < 0) value += MOD; return *this; } inline ModInt& operator*=(ModInt x) noexcept { value = (value * x.value) % MOD; return *this; } inline ModInt& operator/=(ModInt x) noexcept { value = (value * x.inv().value) % MOD; return *this; } inline ModInt operator+(ModInt x) const noexcept { return ModInt(*this) += x; } inline ModInt operator-(ModInt x) const noexcept { return ModInt(*this) -= x; } inline ModInt operator*(ModInt x) const noexcept { return ModInt(*this) *= x; } inline ModInt operator/(ModInt x) const noexcept { return ModInt(*this) /= x; } inline bool operator==(ModInt x) const noexcept { return value == x.value; } inline bool operator!=(ModInt x) const noexcept { return !(this->operator==(x)); } friend ostream& operator<<(ostream &os, ModInt x) noexcept { os << x.value; return os; } friend istream& operator>>(istream &is, ModInt &x) noexcept { is >> x.value; return is; } static constexpr inline ModInt pow(int64_t n, int64_t p) noexcept { int64_t ret = 1; for(; p > 0; p >>= 1) { if (p & 1) ret = (ret * n) % MOD; n = (n * n) % MOD; } return ret; } ModInt p(int64_t p){ int64_t n = value; int64_t ret = 1; for(; p > 0; p >>= 1) { if (p & 1) ret = (ret * n) % MOD; n = (n * n) % MOD; } return value = ret; } }; using mint = ModInt; mint p, q; mint func(int64_t x){ mint tmp = 1; tmp /= 2; mint t2 = 1; t2 -= p*2/q; t2.p(x); t2 += 1; return tmp * t2; } signed main(){ int n, m; cin >> n >> m; int k; cin >> k; cin >> p >> q; mint b[100010]; mint ans = 0; for(int i = 0;i < n;i++){ cin >> b[i]; if(i < m){ ans += b[i] * func(k); }else{ ans += b[i] * ((mint)(1) - func(k)); } } cout << ans << endl; return 0; }