#include <bits/stdc++.h>
using namespace std;
int N, Q, a, b;
int v[100005], c[100005];
long long dp[100005];
pair<long long, int> best[2];
void update(long long aux, int auxc) {
  if (auxc != best[0].second && auxc != best[1].second && aux > best[1].first) {
    best[1].first = aux;
    best[1].second = auxc;
  } else if (auxc == best[0].second && aux > best[0].first)
    best[0].first = aux;
  else if (auxc == best[1].second && aux > best[1].first)
    best[1].first = aux;
  if (best[1].first > best[0].first) swap(best[0], best[1]);
}
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);
    best[0] = make_pair(0LL, 1);
    best[1] = make_pair(0LL, 2);
    for (int i = 1; i <= N; ++i) dp[i] = -(1LL << 62);
    for (int i = 0; i < N; ++i) {
      long long aux1, aux2;
      if (best[0].second != c[i])
        aux1 = best[0].first + (long long)b * v[i];
      else
        aux1 = best[1].first + (long long)b * v[i];
      aux2 = dp[c[i]] + (long long)a * v[i];
      dp[c[i]] = max(dp[c[i]], max(aux1, aux2));
      update(aux1, c[i]);
      update(aux2, c[i]);
    }
    printf("%I64d\n", best[0].first);
  }
  return 0;
}
