#include "overtaking.h"
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
const int maxn = 3e5 + 10;
long long l, n, m, x, y;
vector < long long > t;
vector < int > w, s;
void init(int L, int N, std::vector<long long> T, std::vector<int> W, int X, int M, std::vector<int> S)
{
l = L;
n = N;
t = T;
x = X;
w = W;
m = M;
s = S;
return;
}
struct bus
{
long long t, s, i;
bus(){};
bus(int _t, int _s, int _i)
{
t = _t;
s = _s;
i = _i;
}
};
bus a[maxn];
long long arrival_time(long long Y)
{
y = Y;
vector < bus > g;
for (int i = 0; i < n; ++ i)
{
long long t1 = t[i];
long long s1 = w[i];
if(t1 >= y)continue;
g.pb(bus(t1, s1, i));
}
long long arrive = y;
long long pre = s[0];
for (int i = 1; i < m; ++ i)
{
long long dist = s[i] - pre;
long long typical_arrive = arrive + dist * x;
vector < bus > v;
for (auto &[t1, s1, nomer]: g)
{
long long curr_arrive = (t1 + s[i] * s1);
if(curr_arrive <= typical_arrive)
{
arrive = min(arrive, curr_arrive);
}
else v.pb(bus(t1, s1, nomer));
}
g = v;
pre = s[i];
}
return arrive;
}