#include <bits/stdc++.h>
using namespace std;
inline long long IN() {
  long long x = 0;
  int ch = getchar(), f = 1;
  while (!isdigit(ch) && (ch != '-') && (ch != EOF)) ch = getchar();
  if (ch == '-') {
    f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = (x << 1) + (x << 3) + ch - '0';
    ch = getchar();
  }
  return x * f;
}
inline void OUT(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x >= 10)
    OUT(x / 10), putchar(x % 10 + '0');
  else
    putchar(x + '0');
}
const int N = 200005;
double Ad[N], Ms[N], Ans;
int n, t, q, Mx[N << 2], Mn[N << 2], My[N], Yt[N], Tr[N];
double AdVal(int l) {
  if (Yt[l] >= Tr[l]) return 0;
  return My[l] * (1.0 * (Yt[l] + 1) / (Yt[l] + 1 + Tr[l]) -
                  1.0 * Yt[l] / (Yt[l] + Tr[l]));
}
double MsVal(int l) {
  if (Yt[l] == 0) return (1 << 29);
  if (Yt[l] > Tr[l]) return 0;
  return My[l] * (1.0 * Yt[l] / (Yt[l] + Tr[l]) -
                  1.0 * (Yt[l] - 1) / (Yt[l] + Tr[l] - 1));
}
void Update(int i) {
  Mx[i] = Ad[Mx[i << 1]] > Ad[Mx[i << 1 | 1]] ? Mx[i << 1] : Mx[i << 1 | 1];
  Mn[i] = Ms[Mn[i << 1]] < Ms[Mn[i << 1 | 1]] ? Mn[i << 1] : Mn[i << 1 | 1];
}
void Build(int i, int l, int r) {
  if (l == r) {
    Mx[i] = Mn[i] = l;
    return;
  }
  int mid = l + r >> 1;
  Build(i << 1, l, mid), Build(i << 1 | 1, mid + 1, r);
  Update(i);
}
void Inc(int i, int l, int r, int Ps) {
  if (l == r) {
    Ans += Ad[l];
    Yt[l]++;
    Ms[l] = Ad[l], Ad[l] = AdVal(l);
    return;
  }
  int mid = l + r >> 1;
  if (Ps <= mid)
    Inc(i << 1, l, mid, Ps);
  else
    Inc(i << 1 | 1, mid + 1, r, Ps);
  Update(i);
}
void Dec(int i, int l, int r, int Ps) {
  if (l == r) {
    Ans -= Ms[l];
    Yt[l]--;
    Ad[l] = Ms[l], Ms[l] = MsVal(l);
    return;
  }
  int mid = l + r >> 1;
  if (Ps <= mid)
    Dec(i << 1, l, mid, Ps);
  else
    Dec(i << 1 | 1, mid + 1, r, Ps);
  Update(i);
}
void MdfTr(int i, int l, int r, int Ps, int Val) {
  if (l == r) {
    int Nw = min(Yt[l], Tr[l]);
    Ans -= 1.0 * My[l] * Nw / (Nw + Tr[l]);
    Tr[l] += Val;
    Ad[l] = AdVal(l), Ms[l] = MsVal(l);
    Nw = min(Yt[l], Tr[l]);
    Ans += 1.0 * My[l] * Nw / (Nw + Tr[l]);
    return;
  }
  int mid = l + r >> 1;
  if (Ps <= mid)
    MdfTr(i << 1, l, mid, Ps, Val);
  else
    MdfTr(i << 1 | 1, mid + 1, r, Ps, Val);
  Update(i);
}
int main() {
  n = IN(), t = IN(), q = IN();
  for (int i = 1; i <= n; i++) My[i] = IN();
  for (int i = 1; i <= n; i++) Tr[i] = IN(), Yt[i] = 0;
  for (int i = 1; i <= n; i++)
    Ad[i] = 1.0 * My[i] / (Tr[i] + 1), Ms[i] = (1 << 29);
  Build(1, 1, n);
  for (int i = 1; i <= t; i++) Inc(1, 1, n, Mx[1]);
  for (int i = 1; i <= q; i++) {
    int lx = IN(), Ps = IN();
    if (lx == 1)
      MdfTr(1, 1, n, Ps, 1);
    else
      MdfTr(1, 1, n, Ps, -1);
    while (Ms[Mn[1]] < Ad[Mx[1]]) {
      Dec(1, 1, n, Mn[1]);
      Inc(1, 1, n, Mx[1]);
    }
    printf("%.10lf\n", Ans);
  }
}
