#include <bits/stdc++.h>
using namespace std;
long long n, m;
long long a[450000], h[450000], b[450000];
double seg[450000 * 5 + 1];
double l[450000], r[450000], z[450000];
;
vector<long long> v[450000];
void compress() {
  vector<long long> xxx;
  for (long long i = 1; i < n + 1; i++) {
    xxx.emplace_back(v[2 * i][0]);
    xxx.emplace_back(v[2 * i][1]);
    xxx.emplace_back(v[2 * i + 1][0]);
    xxx.emplace_back(v[2 * i + 1][1]);
  }
  for (long long i = 1; i < m + 1; i++) {
    xxx.emplace_back(b[i]);
  }
  sort(begin(xxx), end(xxx));
  map<long long, long long> c;
  long long cur = 1;
  c[xxx[0]] = cur;
  for (long long i = 1; i < (long long)xxx.size(); i++) {
    if (xxx[i] != xxx[i - 1]) cur++;
    c[xxx[i]] = cur;
  }
  for (long long i = 1; i < n + 1; i++) {
    v[2 * i][0] = c[v[2 * i][0]];
    v[2 * i][1] = c[v[2 * i][1]];
    v[2 * i + 1][0] = c[v[2 * i + 1][0]];
    v[2 * i + 1][1] = c[v[2 * i + 1][1]];
  }
  for (long long i = 1; i < m + 1; i++) {
    b[i] = c[b[i]];
  }
}
void update(long long l1, long long r1, double val, long long l, long long r,
            long long node) {
  if (r1 < l or l1 > r) return;
  if (l1 <= l and r <= r1) {
    seg[node] *= val;
    return;
  }
  long long mid = (l + r) >> 1;
  update(l1, r1, val, l, mid, 2 * node);
  update(l1, r1, val, mid + 1, r, 2 * node + 1);
}
double queri(long long ind, long long l, long long r, long long node,
             double pre) {
  pre *= seg[node];
  if (l == r) return pre;
  long long mid = (l + r) >> 1;
  if (ind <= mid)
    return queri(ind, l, mid, 2 * node, pre);
  else
    return queri(ind, mid + 1, r, 2 * node + 1, pre);
}
signed main() {
  cin.tie(0);
  cout.tie(0);
  ios_base::sync_with_stdio(false);
  cin >> n >> m;
  for (long long i = 1; i < 5 * 450000 + 1; i++) seg[i] = 1.0;
  for (long long i = 1; i < n + 1; i++) {
    cin >> a[i] >> h[i] >> l[i] >> r[i];
    l[i] *= 1e-2;
    r[i] *= 1e-2;
    v[2 * i] = {a[i] - h[i], a[i] - 1, i};
    v[2 * i + 1] = {a[i] + 1, a[i] + h[i], i};
  }
  for (long long i = 1; i < m + 1; i++) {
    cin >> b[i] >> z[i];
  }
  compress();
  for (long long i = 1; i < n + 1; i++) {
    update(v[2 * i][0], v[2 * i][1], 1 - l[i], 1, 450000, 1);
    update(v[2 * i + 1][0], v[2 * i + 1][1], 1 - r[i], 1, 450000, 1);
  }
  double ans = 0;
  for (long long i = 1; i < m + 1; i++) {
    ans += z[i] * queri(b[i], 1, 450000, 1, 1);
  }
  cout << ans << '\n';
}
