#include <bits/stdc++.h>
using namespace std;
char BUF[3500000];
inline void I(int& a) { scanf("%d", &a); }
inline void I(int& a, int& b) { scanf("%d%d", &a, &b); }
inline void I(int& a, int& b, int& c) { scanf("%d%d%d", &a, &b, &c); }
inline void I(int& a, int& b, int& c, int& d) {
  scanf("%d%d%d%d", &a, &b, &c, &d);
}
inline void L(long long& a) { scanf("%lld", &a); }
inline void L(long long& a, long long& b) { scanf("%lld%lld", &a, &b); }
inline void L(long long& a, long long& b, long long& c) {
  scanf("%lld%lld%lld", &a, &b, &c);
}
inline void L(long long& a, long long& b, long long& c, long long& d) {
  scanf("%lld%lld%lld%lld", &a, &b, &c, &d);
}
inline void S(string& str) {
  str.clear();
  scanf("%s", BUF);
  int s = strlen(BUF);
  for (int i = 0; i < s; i++) str.push_back(BUF[i]);
}
inline void SV(vector<int>& v) {
  v.clear();
  scanf("%s", BUF);
  int s = strlen(BUF);
  for (int i = 0; i < s; i++)
    if ('a' <= BUF[i] && BUF[i] <= 'z')
      v.push_back(BUF[i] - 'a');
    else
      v.push_back(BUF[i] - 'A');
}
const auto EPS = 1e-10;
const auto INF = 10000000000000000;
const auto MOD = 1000000007;
int n, q;
long long v[100000];
int c[100000];
long long dp[100001];
int main() {
  I(n, q);
  for (int i = 0; i < n; i++) L(v[i]);
  for (int i = 0; i < n; i++) I(c[i]);
  for (int i = 0; i < q; i++) {
    memset(dp, 0, sizeof(dp));
    for (int j = 0; j < 100001; j++) dp[j] = -INF;
    long long a, b;
    pair<long long, long long> best1 = pair<long long, long long>(-INF, -1),
                               best2 = pair<long long, long long>(-INF, -1);
    L(a, b);
    for (int j = 0; j < n; j++) {
      long long score = v[j] * b;
      score = max(score, dp[c[j]] + v[j] * a);
      if (best1.second != c[j]) {
        score = max(score, best1.first + v[j] * b);
      } else {
        score = max(score, best2.first + v[j] * b);
      }
      if (best1.second == c[j]) {
        if (best1.first < score) {
          best1 = pair<long long, long long>(score, c[j]);
        }
      } else {
        if (best1.first < score) {
          best2 = best1;
          best1 = pair<long long, long long>(score, c[j]);
        } else if (best2.first < score) {
          best2 = pair<long long, long long>(score, c[j]);
        }
      }
      dp[c[j]] = max(dp[c[j]], score);
    }
    printf("%I64d\n", max(0LL, best1.first));
  }
}
