#include "fish.h"
#include <iostream>
#include <vector>
#include <algorithm>
#define int long long
#define MAXN 300000
int N, M;
std::vector<signed> X, Y, W;
int dp[MAXN+5];
int dpm[MAXN+5];
int WA[MAXN+5];
long long max_weights(signed _N, signed _M, std::vector<signed> _X, std::vector<signed> _Y,
std::vector<signed> _W) {
N = _N; M = _M;
X = std::move(_X);
Y = std::move(_Y);
W = std::move(_W);
for (int i = 0; i < M; ++i)
WA[X[i]] = W[i];
dp[0] = N > 1 ? WA[1] : 0;
dpm[0] = dp[0];
for (int i = 1; i < N; ++i)
{
int nxv = (i+1 < N ? WA[i+1] : 0);
dp[i] = std::max({
WA[i-1], // alone
dp[i-1] - WA[i],
i-2 < 0 ? 0 : (dp[i-2]), // WA[i-1] contributed by.. dp[i-2]
i-3 < 0 ? 0 : (dpm[i-3] + WA[i-1])
}) + nxv;
dpm[i] = std::max(dpm[i-1], dp[i]);
//printf("dp[%i] = %i, dpm=%i\n", i, dp[i], dpm[i]);
}
return dpm[N-1];
}