#include<cmath> #include<set> #include<map> #include<queue> #include<cstdio> #include<vector> #include<cstring> #include <iostream> #include<algorithm> using namespace std; typedef long long ll; typedef unsigned long long ull; const int maxn = 2e5 + 10; const int M = maxn * 30; const ull seed = 131; const int INF = 0x3f3f3f3f; const int MOD = 1e6 + 3; ll inv[maxn << 1], fac[maxn << 1]; ll ppow(ll a, ll b){ ll ret = 1; while(b){ if(b & 1) ret = ret * a % MOD; a = a * a % MOD; b >>= 1; } return ret; } void init(int n){ fac[0] = inv[0] = 1; for(int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i % MOD; inv[n] = ppow(fac[n], MOD - 2); for(int i = n - 1; i >= 1; i--){ inv[i] = inv[i + 1] * (i + 1LL) % MOD; } } ll C(int n, int m){ if(m == 0) return 1; return fac[n] * inv[m] % MOD * inv[n - m] % MOD; } ll l[maxn], t[maxn]; ll dp[1000][1000]; int main(){ ll n, a, b, c; scanf("%lld%lld%lld%lld", &n, &a, &b, &c); init(n + n); ll k = c * ppow(a + b - 1, MOD - 2) % MOD; ll ans = 0; for(int i = 1; i <= n; i++) scanf("%lld", &l[i]), l[i] = (l[i] + k) % MOD; for(int i = 1; i <= n; i++) scanf("%lld", &t[i]), t[i] = (t[i] + k) % MOD; for(int i = 2; i <= n; i++){ ans = (ans + l[i] * C(n + n - i - 2, n - 2) % MOD * ppow(a, n - 1) % MOD * ppow(b, n - i) % MOD) % MOD; // printf("** %lld %lld ", n + n - i - 2, n - 2); } for(int i = 2; i <= n; i++){ ans = (ans + t[i] * C(n + n - i - 2, n - 2) % MOD * ppow(a, n - i) % MOD * ppow(b, n - 1) % MOD) % MOD; } ans = ((ans - k) % MOD + MOD) % MOD; printf("%lld ", ans); return 0; } /* 4 3 5 2 7 1 4 3 7 4 4 8 */ /* 3 2 3 0 1 1 1 1 1 1 */