#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 6.66;
const int MAXM = 1e4 + 6.66;
const int INF = 1e9 + 7;
const int MAXVAL = MAXN + MAXM;
double seg[MAXVAL * 4];
double lazy[MAXVAL * 4];
int pt[MAXN], pm[MAXM], hei[MAXN];
int p1[MAXN], p2[MAXN], pw[MAXM];
pair<int, int> compressed[MAXN + MAXM];
int cmp_pos[MAXN + MAXM];
int n, m;
void shift(int idx, int l, int r) {
  if (lazy[idx] == 1) return;
  lazy[idx * 2] *= lazy[idx];
  lazy[idx * 2 + 1] *= lazy[idx];
  seg[idx * 2] *= lazy[idx];
  seg[idx * 2 + 1] *= lazy[idx];
  lazy[idx] = 1;
}
void upd(int idx, int l, int r, int b, int e, double val) {
  if (b >= e) return;
  if (l >= r) return;
  if (l >= e || r <= b) return;
  if (l >= b && r <= e) {
    lazy[idx] *= val;
    seg[idx] *= val;
    return;
  }
  int mid = l + (r - l) / 2;
  shift(idx, l, r);
  upd(idx * 2, l, mid, b, e, val);
  upd(idx * 2 + 1, mid, r, b, e, val);
  seg[idx] = seg[idx * 2] * seg[idx * 2 + 1];
}
double get(int idx, int l, int r, int x) {
  if (l > x || r <= x) return 1;
  if (r - l == 1) return seg[idx];
  shift(idx, l, r);
  int mid = l + (r - l) / 2;
  return get(idx * 2, l, mid, x) * get(idx * 2 + 1, mid, r, x);
}
void compress(int n, int m) {
  for (int i = 0; i < n; i++) compressed[i] = make_pair(pt[i], i);
  for (int i = 0; i < m; i++) compressed[i + n] = make_pair(pm[i], n + i);
  sort(compressed, compressed + n + m);
  for (int i = 0; i < m + n; i++) cmp_pos[compressed[i].second] = i;
}
int front(int i) {
  return upper_bound(
             compressed, compressed + m + n,
             make_pair(compressed[i].first + hei[compressed[i].second], INF)) -
         compressed;
}
int back(int i) {
  return lower_bound(
             compressed, compressed + m + n,
             make_pair(compressed[i].first - hei[compressed[i].second], 0)) -
         compressed;
}
int last(int w) {
  return upper_bound(compressed, compressed + m + n, make_pair(w, INF)) -
         compressed;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> n >> m;
  fill(seg, seg + 4 * (MAXN + MAXM), 1);
  fill(lazy, lazy + 4 * (MAXN + MAXM), 1);
  for (int i = 0; i < n; i++) cin >> pt[i] >> hei[i] >> p1[i] >> p2[i];
  for (int i = 0; i < m; i++) cin >> pm[i] >> pw[i];
  compress(n, m);
  for (int i = 0; i < n; i++) {
    upd(1, 0, n + m, last(pt[i]), front(cmp_pos[i]), 1 - (p2[i] * 1.0 / 100));
    upd(1, 0, n + m, back(cmp_pos[i]), cmp_pos[i], 1 - (p1[i] * 1.0 / 100));
  }
  long double ans = 0;
  for (int i = 0; i < m; i++) ans += pw[i] * get(1, 0, m + n, cmp_pos[n + i]);
  cout << fixed << setprecision(8) << ans << endl;
  return 0;
}
