#include <bits/stdc++.h>
using namespace std;
const int N = 300010;
const double INF = 1e5;
const double eps = 1e-9;
int n, t, m, used = 0;
int p[N], a[N], num[N];
double ans = 0;
struct P {
  int id;
  double w;
  P(int Id = 0, double W = 0) : id(Id), w(W) {}
};
P win[N * 4], los[2][N * 4];
double Sum(int x, int y) { return (double)x / (x + y); }
void pushup(int u) {
  if (win[u * 2].w > win[u * 2 + 1].w + eps)
    win[u] = win[u * 2];
  else
    win[u] = win[u * 2 + 1];
  if (los[0][u * 2].w < los[0][u * 2 + 1].w - eps)
    los[0][u] = los[0][u * 2];
  else
    los[0][u] = los[0][u * 2 + 1];
  if (los[1][u * 2].w < los[1][u * 2 + 1].w - eps)
    los[1][u] = los[1][u * 2];
  else
    los[1][u] = los[1][u * 2 + 1];
}
void build(int u, int l, int r) {
  if (l >= r) {
    win[u] = P(l, -INF), los[0][u] = los[1][u] = P(l, INF);
    if (num[l] >= a[l])
      win[u].w = -INF;
    else
      win[u].w = (double)p[l] * (Sum(num[l] + 1, a[l]) - Sum(num[l], a[l]));
    if (!num[l])
      los[0][u].w = 0;
    else
      los[1][u].w = (double)p[l] * (Sum(num[l], a[l]) - Sum(num[l] - 1, a[l]));
    return;
  }
  int mid = (l + r) >> 1;
  build(u * 2, l, mid), build(u * 2 + 1, mid + 1, r);
  pushup(u);
}
void mdy(int u, int l, int r, int x, int w, int opt) {
  if (l >= r) {
    num[l] += w, ans += (w >= 0) ? win[u].w : -los[opt][u].w;
    win[u] = P(l, -INF), los[0][u] = los[1][u] = P(l, INF);
    if (num[l] >= a[l])
      win[u].w = -INF;
    else
      win[u].w = (double)p[l] * (Sum(num[l] + 1, a[l]) - Sum(num[l], a[l]));
    if (!num[l])
      los[0][u].w = 0;
    else
      los[1][u].w = (double)p[l] * (Sum(num[l], a[l]) - Sum(num[l] - 1, a[l]));
    return;
  }
  int mid = (l + r) >> 1;
  x <= mid ? mdy(u * 2, l, mid, x, w, opt)
           : mdy(u * 2 + 1, mid + 1, r, x, w, opt);
  pushup(u);
}
void reset(int u, int l, int r, int x) {
  if (l >= r) {
    win[u] = P(l, -INF), los[0][u] = los[1][u] = P(l, INF);
    if (num[l] >= a[l])
      win[u].w = -INF;
    else
      win[u].w = (double)p[l] * (Sum(num[l] + 1, a[l]) - Sum(num[l], a[l]));
    if (!num[l])
      los[0][u].w = 0;
    else
      los[1][u].w = (double)p[l] * (Sum(num[l], a[l]) - Sum(num[l] - 1, a[l]));
    return;
  }
  int mid = (l + r) >> 1;
  x <= mid ? reset(u * 2, l, mid, x) : reset(u * 2 + 1, mid + 1, r, x);
  pushup(u);
}
int main() {
  scanf("%d%d%d", &n, &t, &m);
  for (int i = 1; i <= n; i++) scanf("%d", &p[i]);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  build(1, 1, n);
  for (; used < t && win[1].w > 0;) ++used, mdy(1, 1, n, win[1].id, 1, 0);
  for (int opt, x; m; --m) {
    scanf("%d%d", &opt, &x);
    ans -= (double)p[x] * Sum(num[x], a[x]);
    a[x] += (opt == 1) ? 1 : -1;
    ans += (double)p[x] * Sum(num[x], a[x]);
    reset(1, 1, n, x);
    for (; num[x] > a[x];) --used, mdy(1, 1, n, x, -1, 1);
    for (; win[1].w > 0;) {
      if (used < t)
        ++used, mdy(1, 1, n, win[1].id, 1, 0);
      else if (win[1].w > los[1][1].w) {
        int id1 = win[1].id, id2 = los[1][1].id;
        mdy(1, 1, n, id1, 1, 0);
        mdy(1, 1, n, id2, -1, 1);
      } else
        break;
    }
    printf("%0.9lf\n", ans);
  }
  return 0;
}
