#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
const long long INF = 1000000000000000;
int N, Q;
long long v[MAXN];
int col[MAXN];
long long col_max[MAXN];
int mx[2];
inline int get(int x) {
  if (col_max[mx[0]] < col_max[mx[1]]) {
    swap(mx[0], mx[1]);
  }
  for (int i = 0, _i = 2; i < _i; ++i) {
    if (mx[i] == N + 1 || mx[i] == x) continue;
    return mx[i];
  }
  return N + 1;
}
void update(int c, long long v) {
  col_max[c] = max(col_max[c], v);
  if (col_max[mx[0]] < col_max[mx[1]]) {
    swap(mx[0], mx[1]);
  }
  for (int i = 0, _i = 2; i < _i; ++i) {
    if (mx[i] == N + 1) {
      mx[i] = c;
      return;
    }
  }
  for (int i = 0, _i = 2; i < _i; ++i) {
    if (c == mx[i]) {
      return;
    }
  }
  for (int i = (1), _i = (0); i >= _i; --i) {
    if (v > col_max[mx[i]]) {
      mx[i] = c;
      break;
    }
  }
}
inline void solve() {
  long long a, b;
  long long ans = 0;
  scanf("%I64d%I64d", &a, &b);
  mx[0] = mx[1] = N + 1;
  for (int i = 0, _i = N; i < _i; ++i) {
    col_max[col[i]] = -INF;
  }
  col_max[N + 1] = INF * 2LL;
  for (int i = 0, _i = N; i < _i; ++i) {
    long long cur = b * v[i];
    if (col_max[col[i]] != -INF) cur = max(cur, col_max[col[i]] + (a * v[i]));
    int mxcol = get(col[i]);
    if (mxcol != N + 1) {
      cur = max(cur, col_max[mxcol] + (b * v[i]));
    }
    update(col[i], cur);
    ans = max(ans, cur);
  }
  cout << ans << '\n';
}
int main(int argc, char *argv[]) {
  scanf("%d%d", &N, &Q);
  for (int i = 0, _i = N; i < _i; ++i) {
    scanf("%I64d", v + i);
  }
  for (int i = 0, _i = N; i < _i; ++i) {
    scanf("%d", col + i);
  }
  for (int i = 0, _i = Q; i < _i; ++i) {
    solve();
  }
  return 0;
}
