#include #include #include using namespace atcoder; using mint = modint998244353; using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000001 #define Inf64 1000000000000000001 long long op(long long a,long long b){ return max(a,b); } long long e(){ return -Inf64; } vector> v; vector dp; void dfs(int l,int r){ if(r-l<=1)return; int m = (l+r)/2; dfs(l,m); vector t0,t1; for(int i=l;i> qs(t0.size()); for(int i=l;i seg(t1.size()); rep(i,t0.size()){ rep(j,qs[i].size()){ int ii = qs[i][j]; int d = distance(t1.begin(),lower_bound(t1.begin(),t1.end(),v[ii][2])); if(ii>n>>tK; vector t(n),x(n),y(n),a(n); { vector T(n),X(n),C(n); rep(i,n)cin>>T[i]; rep(i,n)cin>>X[i]; rep(i,n)cin>>C[i]; rep(i,n){ t[i] = T[i] * tK; x[i] = X[i] + 1000000005; a[i] = C[i]; y[i] = 0; } } rep(i,n){ array A = {y[i],t[i]-y[i]+x[i],t[i]-y[i]-x[i],a[i]}; v.push_back(A); } array A = {0,0,0,0}; v.push_back(A); sort(v.begin(),v.end()); n++; dp.assign(n,-Inf64); dp[0] = 0; dfs(0,n); long long ans = -Inf64; rep(i,n)ans = max(ans,dp[i]); cout<