#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void umax(T &a, T b) {
  if (a < b) a = b;
}
template <class T>
inline void umin(T &a, T b) {
  if (a > b) a = b;
}
template <class T>
inline T abs(T a) {
  return a > 0 ? a : -a;
}
template <class T>
inline T gcd(T a, T b) {
  return __gcd(a, b);
}
template <class T>
inline T lcm(T a, T b) {
  return a / gcd(a, b) * b;
}
const int inf = 1e9 + 143;
const long long longinf = 1e18 + 143;
inline int read() {
  int x;
  scanf(" %d", &x);
  return x;
}
const int N = 1 << 17;
int n, m;
int a[N], h[N], l[N], r[N];
int b[N], z[N];
double p[N];
enum { BEGIN, END, MUSHROOM };
struct event {
  int x, op;
  double prob;
  int id;
  bool operator<(const event &other) const {
    if (x != other.x) return x < other.x;
    return op < other.op;
  }
};
double prod[N << 1];
void add(int x, double p) {
  x += N;
  prod[x] = p;
  while (x > 1) {
    x >>= 1;
    prod[x] = prod[x + x] * prod[x + x + 1];
  }
}
void del(int x) {
  x += N;
  prod[x] = 1;
  while (x > 1) {
    x >>= 1;
    prod[x] = prod[x + x] * prod[x + x + 1];
  }
}
int main() {
  n = read();
  m = read();
  for (int i = 0; i < n; i++) {
    a[i] = read();
    h[i] = read();
    l[i] = read();
    r[i] = read();
  }
  for (int i = 0; i < m; i++) {
    b[i] = read();
    z[i] = read();
  }
  for (int i = 0; i < m; i++) {
    p[i] = 1.0;
  }
  for (int i = 0; i < N + N; i++) prod[i] = 1.0;
  for (int it = 0; it < 2; it++) {
    vector<event> evs;
    for (int i = 0; i < n; i++) {
      evs.push_back({a[i] - h[i], BEGIN, 1.0 - l[i] / 100.0, i});
      evs.push_back({a[i], END, 1.0 - l[i] / 100.0, i});
    }
    for (int i = 0; i < m; i++) {
      evs.push_back({b[i], MUSHROOM, 0, i});
    }
    sort((evs).begin(), (evs).end());
    for (auto e : evs) {
      if (e.op == BEGIN) {
        add(e.id, e.prob);
      } else if (e.op == END) {
        del(e.id);
      } else if (e.op == MUSHROOM) {
        p[e.id] *= prod[1];
      } else {
        assert(0);
      }
    }
    for (int i = 0; i < n; i++) {
      a[i] *= -1;
      swap(l[i], r[i]);
    }
    for (int i = 0; i < m; i++) b[i] *= -1;
  }
  double ans = 0;
  for (int i = 0; i < m; i++) {
    ans += p[i] * z[i];
  }
  printf("%.10f\n", ans);
  return 0;
}
