#include <bits/stdc++.h>
using namespace std;
const int iinf = 1e9 + 10;
const long long inf = 1ll << 60;
const long long mod = 1e9 + 7;
void GG() {
  cout << "0\n";
  exit(0);
}
long long mpow(long long a, long long n, long long mo = mod) {
  long long re = 1;
  while (n > 0) {
    if (n & 1) re = re * a % mo;
    a = a * a % mo;
    n >>= 1;
  }
  return re;
}
long long inv(long long b, long long mo = mod) {
  if (b == 1) return b;
  return (mo - mo / b) * inv(mo % b, mo) % mo;
}
const int maxn = 2e5 + 5;
int ene[maxn], val[maxn], tot[maxn];
priority_queue<pair<double, int> > want;
priority_queue<pair<double, int>, vector<pair<double, int> >,
               greater<pair<double, int> > >
    have;
int whome[maxn * 10], lasttouch[maxn];
inline double GT(int x) {
  return val[x] * (long long)ene[x] /
         (double)(tot[x] * (long long)(tot[x] + 1));
}
inline double GT2(int x) {
  return val[x] * (long long)ene[x] /
         (double)(tot[x] * (long long)(tot[x] - 1));
}
int IT = 0;
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  ;
  int n, T, q;
  cin >> n >> T >> q;
  for (int i = 0; i < n; ++i) {
    cin >> val[i];
  }
  double re = 0;
  for (int i = 0; i < n; ++i) {
    cin >> tot[i];
    ene[i] = tot[i];
    whome[i] = i;
    lasttouch[i] = i;
    double dis = val[i] / (double)((tot[i] + 1));
    want.push({dis, i});
  }
  IT = n;
  cout << fixed << setprecision(8);
  for (int nonono = 0; nonono < q; ++nonono) {
    int tp;
    cin >> tp;
    int i;
    cin >> i;
    --i;
    ++IT;
    whome[IT] = i;
    lasttouch[i] = IT;
    if (tp == 1) {
      if (ene[i] != tot[i]) {
        ;
        re += (val[i] / (double)(ene[i] + 1) - val[i] / (double)(tot[i]));
        re -= val[i] / (double)(ene[i] + 1);
        ++T;
        ;
        ;
        --tot[i];
      }
      ++ene[i];
      ++tot[i];
    } else {
      ;
      if (tot[i] != ene[i]) {
        re -= (val[i] / (double)ene[i] - val[i] / (double)(tot[i]));
      }
      --ene[i];
      while (tot[i] > ene[i] * 2) {
        re -= GT2(i);
        --tot[i];
        ++T;
      }
      re += val[i] / (double)(ene[i] + 1);
      --T;
    };
    want.push({GT(i), IT});
    if (ene[i] != tot[i]) have.push({GT2(i), IT});
    while (T > 0 && !want.empty()) {
      pair<double, int> P = want.top();
      want.pop();
      int i = whome[P.second];
      if (lasttouch[i] == P.second && tot[i] + 1 <= ene[i] * 2) {
        re += P.first;
        --T;
        ++IT;
        whome[IT] = i;
        lasttouch[i] = IT;
        have.push({P.first, IT});
        ++tot[i];
        assert(GT2(i) == P.first);
        want.push({GT(i), IT});
      }
    };
    while (T < 0 && !have.empty()) {
      pair<double, int> P = have.top();
      have.pop();
      int i = whome[P.second];
      if (lasttouch[i] == P.second) {
        ;
        re -= P.first;
        ++T;
        ++IT;
        whome[IT] = i;
        lasttouch[i] = IT;
        want.push({P.first, IT});
        --tot[i];
        if (ene[i] != tot[i]) have.push({GT2(i), IT});
      }
    }
    while (1) {
      while (!have.empty() &&
             lasttouch[whome[have.top().second]] != have.top().second)
        have.pop();
      while (!want.empty() &&
             (lasttouch[whome[want.top().second]] != want.top().second ||
              (tot[whome[want.top().second]] + 1 >
               ene[whome[want.top().second]] * 2)))
        want.pop();
      if (!want.empty() && !have.empty()) {
        if (want.top().first > have.top().first) {
          {
            pair<double, int> P = want.top();
            want.pop();
            int i = whome[P.second];
            re += P.first;
            ++IT;
            whome[IT] = i;
            lasttouch[i] = IT;
            have.push({P.first, IT});
            ++tot[i];
            if (tot[i] > ene[i] * 2) {
              ;
              assert(0);
            }
            assert(P.first == GT2(i));
            want.push({GT(i), IT});
          }
          {
            pair<double, int> P = have.top();
            have.pop();
            int i = whome[P.second];
            re -= P.first;
            ++IT;
            whome[IT] = i;
            lasttouch[i] = IT;
            want.push({P.first, IT});
            --tot[i];
            if (ene[i] != tot[i]) have.push({GT2(i), IT});
          }
        } else
          break;
      } else
        break;
    };
    ;
    cout << re << '\n';
  }
}
