#include <bits/stdc++.h>
using namespace std;
double EPS = 1e-9;
int INF = 2000000000;
long long INFF = 8000000000000000000LL;
double PI = acos(-1);
int dirx[8] = {-1, 0, 0, 1, -1, -1, 1, 1};
int diry[8] = {0, 1, -1, 0, -1, 1, -1, 1};
inline string IntToString(int a) {
  char x[100];
  sprintf(x, "%d", a);
  string s = x;
  return s;
}
inline int StringToInt(string a) {
  char x[100];
  int res;
  strcpy(x, a.c_str());
  sscanf(x, "%d", &res);
  return res;
}
inline string GetString(void) {
  char x[1000005];
  scanf("%s", x);
  string s = x;
  return s;
}
inline string uppercase(string s) {
  int n = (int)s.size();
  for (int(i) = (0); (i) < (n); ++(i))
    if (s[i] >= 'a' && s[i] <= 'z') s[i] = s[i] - 'a' + 'A';
  return s;
}
inline string lowercase(string s) {
  int n = (int)s.size();
  for (int(i) = (0); (i) < (n); ++(i))
    if (s[i] >= 'A' && s[i] <= 'Z') s[i] = s[i] - 'A' + 'a';
  return s;
}
inline void OPEN(string s) {
  freopen((s + ".in").c_str(), "r", stdin);
  freopen((s + ".out").c_str(), "w", stdout);
}
long long dp[100005];
pair<long long, long long> big;
int n, c[100005], v[100005];
int q, a, b;
int main() {
  scanf("%d %d", &n, &q);
  for (int(i) = (0); (i) < (n); ++(i)) scanf("%d", &v[i]);
  for (int(i) = (0); (i) < (n); ++(i)) scanf("%d", &c[i]);
  while (q--) {
    scanf("%d %d", &a, &b);
    long long risan = 0;
    for (int(i) = (1); (i) <= (n); ++(i)) dp[i] = -INFF;
    big = make_pair(-1, -1);
    for (int(i) = (0); (i) < (n); ++(i)) {
      long long res = (long long)b * (long long)v[i];
      res = max(res, dp[c[i]] + (long long)a * (long long)v[i]);
      if (big.first != -1) {
        if (big.first == c[i]) {
          if (big.second != -1)
            res = max(res, dp[big.second] + (long long)b * (long long)v[i]);
        } else
          res = max(res, dp[big.first] + (long long)b * (long long)v[i]);
      }
      dp[c[i]] = max(dp[c[i]], res);
      if (big.first == -1) {
        big.first = c[i];
      } else if (big.first != c[i]) {
        if (res > dp[big.first]) {
          big.second = big.first;
          big.first = c[i];
        } else if (big.second == -1 || res > dp[big.second])
          big.second = c[i];
      }
      risan = max(risan, res);
    }
    cout << risan << endl;
  }
  return 0;
}
