#include using namespace std; #define int long long #define uint __int128_t #define pb push_back #define fi first #define se second #define rep(i,s,n) for(int i = s;i=(s);i--) #define all(v) (v).begin(),(v).end() #define chmin(a,b) a=min((a),(b)) #define chmax(a,b) a=max((a),(b)) #define low(a,b) lower_bound(all(a),(b))-(a).begin() #define upp(a,b) upper_bound(all(a),(b))-(a).begin() #define fill(i,n) memset(i,n,sizeof(i)) #define endl '\n' #define IOS() ios_base::sync_with_stdio(0);cin.tie(0) typedef long long ll; typedef pairpint; typedef vectorvint; typedef vector vvint; typedef vectorvpint; typedef pair P1; typedef pair P2; typedef pair PP; static const ll maxLL = (ll)1 << 62; const ll MOD=1000000007; const ll INF=1e18; int N,M,P; int ans=0,sum=0; int v[200010],s[200010],cnt[200010]; const int MAX = 510000; long long fac[MAX], finv[MAX], inv[MAX]; // テーブルを作る前処理 void COMinit() { fac[0] = fac[1] = 1; finv[0] = finv[1] = 1; inv[1] = 1; for (int i = 2; i < MAX; i++){ fac[i] = fac[i - 1] * i % MOD; inv[i] = MOD - inv[MOD%i] * (MOD / i) % MOD; finv[i] = finv[i - 1] * inv[i] % MOD; } } // 二項係数計算 long long COM(int n, int k){ if (n < k) return 0; if (n < 0 || k < 0) return 0; return fac[n] * (finv[k] * finv[n - k] % MOD) % MOD; } ll mod_pow(ll x, ll n) { ll res = 1; while (n > 0) { if (n & 1) res = res * x % MOD; x = x * x % MOD; n >>= 1; } return res; } int mod_inv(int x) { return mod_pow(x, MOD - 2); } signed main() { IOS(); COMinit(); //(1ll<>N>>M>>P; rep(i,0,N)cin>>v[i]; sort(v,v+N); reverse(v,v+N); rep(i,0,N){ s[i+1]=s[i]+v[i]; s[i+1]%=MOD; } int x=mod_inv(100); int xx=mod_pow(P*x%MOD,M); int xxx=1; int y=1; rep(i,0,N){ int tmp=COM(i+M-1,M-1)*xx%MOD*xxx%MOD; (xxx*=(100-P)*x%MOD)%=MOD; (y+=MOD-tmp)%=MOD; y%=MOD; (ans+=(tmp*s[i])%MOD)%=MOD; ans%=MOD; } (ans+=(y*s[N]))%=MOD; cout<