#include <bits/stdc++.h>
using namespace std;
long long MOD = 1e9 + 7;
long long INF = 1e17 + 7;
long long n, m;
long long a[100006];
long long c[100006];
long long mx1, mx2;
long long dp[1000010];
long long col[1000010];
int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) scanf("%I64d", &a[i]);
  for (int i = 1; i <= n; i++) scanf("%I64d", &c[i]);
  while (m--) {
    long long x, y;
    scanf("%lld%lld", &x, &y);
    long long res = 0;
    memset(dp, 0, sizeof(dp));
    memset(col, 0, sizeof(col));
    dp[0] = -INF;
    for (int i = 1; i <= n; i++) {
      dp[i] = a[i] * y;
      if (dp[mx1] < dp[mx2]) swap(mx1, mx2);
      if (c[mx1] != c[i]) dp[i] = max(dp[i], dp[mx1] + (y * a[i]));
      if (c[mx2] != c[i]) dp[i] = max(dp[i], dp[mx2] + (y * a[i]));
      dp[i] = max(dp[i], dp[col[c[i]]] + (x * a[i]));
      if (dp[col[c[i]]] < dp[i]) col[c[i]] = i;
      if (c[i] != c[mx1] && dp[mx2] < dp[i]) {
        mx2 = i;
      }
      if (c[i] == c[mx1]) {
        if (dp[mx1] < dp[i]) mx1 = i;
      }
      res = max(res, dp[i]);
    }
    cout << res << endl;
  }
  return 0;
}
