#include <bits/stdc++.h>
using namespace std;
const int M = 100000 + 10;
long long int v[M];
int c[M];
long long int dp[M];
int flag[M];
long long int vc[M];
int main() {
  time_t t_start, t_end;
  t_start = clock();
  int n, p;
  cin >> n >> p;
  for (int i = 1; i <= n; i++) {
    cin >> v[i];
  }
  for (int i = 1; i <= n; i++) {
    cin >> c[i];
  }
  for (int q = 0; q < p; q++) {
    long long int a, b;
    cin >> a >> b;
    for (int i = 0; i < M; i++) {
      dp[i] = 0;
      flag[i] = 0;
      vc[i] = 0;
    }
    long long int maxv1 = 0;
    int maxc1 = 0;
    long long int maxv2 = 0;
    int maxc2 = 0;
    for (int i = 1; i <= n; i++) {
      dp[i] = v[i] * b;
      if (flag[c[i]] == 1) {
        long long int val1 = vc[c[i]] + v[i] * a;
        dp[i] = max(dp[i], val1);
      }
      if (maxc1 == c[i]) {
        long long int val2 = maxv2 + v[i] * b;
        dp[i] = max(dp[i], val2);
      } else {
        long long int val2 = maxv1 + v[i] * b;
        dp[i] = max(dp[i], val2);
      }
      if (flag[c[i]] == 0) {
        flag[c[i]] = 1;
        vc[c[i]] = dp[i];
      } else {
        vc[c[i]] = max(vc[c[i]], dp[i]);
      }
      if (maxc1 == c[i]) {
        maxv1 = max(maxv1, vc[c[i]]);
      } else {
        if (maxc2 == c[i]) {
          maxv2 = max(maxv2, vc[c[i]]);
          if (maxv2 > maxv1) {
            long long int tmp = maxv1;
            maxv1 = maxv2;
            maxv2 = tmp;
            int idx = maxc1;
            maxc1 = maxc2;
            maxc2 = idx;
          }
        } else {
          if (vc[c[i]] > maxv1) {
            maxv2 = maxv1;
            maxc2 = maxc1;
            maxv1 = vc[c[i]];
            maxc1 = c[i];
          } else {
            if (vc[c[i]] > maxv2) {
              maxv2 = vc[c[i]];
              maxc2 = c[i];
            }
          }
        }
      }
    }
    long long int ans = 0;
    for (int i = 1; i <= n; i++) {
      ans = max(ans, dp[i]);
    }
    cout << ans << endl;
  }
  t_end = clock();
  return 0;
}
