#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void maximize(T &a, T b) {
  if (b > a) a = b;
}
template <typename T>
inline void minimize(T &a, T b) {
  if (b < a) a = b;
}
template <typename T>
inline void xReplace(T v, T &mx, T &sx) {
  if (v > mx)
    sx = mx, mx = v;
  else if (v > sx)
    sx = v;
}
template <typename T>
inline void nReplace(T v, T &mn, T &sn) {
  if (v < mn)
    sn = mn, mn = v;
  else if (v < sn)
    sn = v;
}
inline long long fr() {
  long long ret = 0, sym = 1;
  int c = 0;
  while (!isdigit(c)) sym = c == '-' ? -1 : 1, c = getchar();
  while (isdigit(c)) ret = ret * 10 + c - '0', c = getchar();
  return ret * sym;
}
const int maxn = 2e5 + 4;
const int maxq = 2e5 + 4;
const long double inf = 1e18L;
const long double eps = 1e-10L;
int n, irc[114514], T, Q;
int dt_p[maxn], dt_l[maxn];
int t_t[maxn] = {};
inline long double getsc(pair<int, int> x) {
  if (x.second >= dt_l[x.first]) return 0;
  if (x.second == -1) return inf;
  return 1.0L * dt_p[x.first] * dt_l[x.first] / (dt_l[x.first] + x.second + 1) /
         (dt_l[x.first] + x.second);
}
inline long double gettotsc(int x) {
  int t = min(dt_l[x], t_t[x] + 1);
  return 1.0L * dt_p[x] * t / (dt_l[x] + t);
}
struct comp {
  bool operator()(const pair<int, int> &a, const pair<int, int> &b) const {
    return fabs(getsc(a) - getsc(b)) > eps ? getsc(a) < getsc(b)
                                           : a.first < b.first;
  }
};
multiset<pair<int, int>, comp> t_h, t_s;
long double dt_ans = 0;
inline void sendforward(pair<int, int> x) {
  int u = x.first, t = x.second;
  t_h.insert(make_pair(u, t + 1));
}
inline void sendback(pair<int, int> x) {
  int u = x.first, t = x.second;
  t_h.insert(make_pair(u, t));
}
inline void add() {
  auto u = *--t_h.end();
  t_h.erase(--t_h.end());
  t_s.erase(make_pair(u.first, t_t[u.first]));
  t_t[u.first] = u.second;
  dt_ans += getsc(u);
  t_h.insert(make_pair(u.first, u.second + 1));
  t_s.insert(make_pair(u.first, u.second));
}
inline void rmv() {
  auto v = *t_s.begin();
  t_s.erase(t_s.begin());
  t_h.erase(make_pair(v.first, t_t[v.first] + 1));
  t_t[v.first] = v.second - 1;
  dt_ans -= getsc(v);
  t_s.insert(make_pair(v.first, v.second - 1));
  t_h.insert(make_pair(v.first, v.second));
}
inline void adjust() {
  auto u = *--t_h.end(), v = *t_s.begin();
  while (getsc(u) > getsc(v) + eps) {
    add(), rmv();
    u = *--t_h.end(), v = *t_s.begin();
  }
}
int main() {
  n = fr(), T = fr(), Q = fr();
  for (int i = 1; i <= (n); ++i) dt_p[i] = fr();
  for (int i = 1; i <= (n); ++i) dt_l[i] = fr();
  for (int i = 1; i <= (n); ++i)
    t_t[i] = -1, t_s.insert(make_pair(i, -1)), t_h.insert(make_pair(i, 0));
  while (T--) add();
  for (int i = 1; i <= (Q); ++i) {
    int o = fr(), x = fr();
    t_h.erase(make_pair(x, t_t[x] + 1)), t_s.erase(make_pair(x, t_t[x])),
        dt_ans -= gettotsc(x);
    dt_l[x] += (o == 1 ? 1 : -1);
    t_h.insert(make_pair(x, t_t[x] + 1)), t_s.insert(make_pair(x, t_t[x])),
        dt_ans += gettotsc(x);
    adjust(), printf("%.9Lf\n", dt_ans);
  }
  return 0;
}
