#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define repr(i, a, b) for (int i = (int)(a); i < (int)(b); i++) #define rep(i, n) repr(i, 0, n) #define INF 2e9 #define MOD 1000000007 //#define MOD 998244353 #define LINF (long long)4e18 #define jck 3.141592 #define PI acos(-1.0); const double EPS = 1e-10; using ll = long long; using Pi = pair; using Pl = pair; template struct Mat{ vector> val; Mat(int n, int m, T x = 0) : val(n,vector(m,x)){} void init(int n, int m, T x = 0){ val.assign(n,vector(m,x)); } size_t size(){ return val.size(); } inline vector& operator [](int i){ return val[i]; } }; Mat operator *(Mat A, Mat B){ Mat R(A.size(),B[0].size()); for(int i = 0; i < A.size(); i++){ for(int j = 0; j < B[0].size(); j++){ for(int k = 0; k < B.size(); k++){ R[i][j] += A[i][k]*B[k][j]+MOD; R[i][j] %= MOD; } } } return R; } Mat pow(Mat A, ll n){ Mat R(A.size(),A.size()); for(int i = 0; i < A.size(); i++) R[i][i] = 1; while(n > 0){ if(n&1) R = R*A; A = A*A; n >>= 1; } return R; } ll modinv(ll a, ll m) { ll b = m, u = 1, v = 0; while (b) { ll t = a / b; a -= t * b; swap(a, b); u -= t * v; swap(u, v); } u %= m; if (u < 0) u += m; return u; } int main(){ ll N,M,K,p,q; cin >> N >> M >> K >> p >> q; vector b(N); rep(i,N) cin >> b[i]; Mat mt(2,2); mt[0][0] = mt[1][1] = (1-p*modinv(q,MOD)%MOD+MOD)%MOD; mt[0][1] = mt[1][0] = p*modinv(q,MOD)%MOD; Mat mt2 = pow(mt,K); ll ans = 0; rep(i,N){ if(i <= M-1){ ans += mt2[0][0]*b[i]%MOD; ans %= MOD; } else{ ans += mt2[0][1]*b[i]%MOD; ans %= MOD; } } cout << ans << endl; }