#include <bits/stdc++.h>
using namespace std;
double pows[101][100010];
int cnt[101];
int main() {
  for (int i = 0; i <= 100; i++) pows[i][0] = 1;
  int N, M;
  cin >> N >> M;
  vector<tuple<int, int, int> > events;
  for (int i = 0; i < N; i++) {
    int a, h, l, r;
    scanf("%d %d %d %d", &a, &h, &l, &r);
    events.push_back(make_tuple(a - h, 0, 100 - l));
    events.push_back(make_tuple(a, 1, 100 - l));
    events.push_back(make_tuple(a + 1, 0, 100 - r));
    events.push_back(make_tuple(a + h + 1, 1, 100 - r));
  }
  for (int i = 0; i < M; i++) {
    int b, z;
    scanf("%d %d", &b, &z);
    events.push_back(make_tuple(b, 2, z));
  }
  sort(events.begin(), events.end());
  double ans = 0;
  double totalProb = 1;
  int idx = 0;
  while (idx < events.size()) {
    int curr = get<0>(events[idx]);
    while (idx < events.size() && curr == get<0>(events[idx]) &&
           get<1>(events[idx]) == 0) {
      int val = get<2>(events[idx]);
      cnt[val] += 1;
      if (pows[val][cnt[val]] == 0)
        pows[val][cnt[val]] = pows[val][cnt[val] - 1] * (val / 100.0);
      idx++;
    }
    while (idx < events.size() && curr == get<0>(events[idx]) &&
           get<1>(events[idx]) == 1) {
      cnt[get<2>(events[idx])] -= 1;
      idx++;
    }
    if (curr == get<0>(events[idx]) && get<1>(events[idx]) == 2) {
      totalProb = 1;
      for (int i = 0; i <= 100; i++) totalProb *= pows[i][cnt[i]];
    }
    while (idx < events.size() && curr == get<0>(events[idx]) &&
           get<1>(events[idx]) == 2) {
      ans += totalProb * get<2>(events[idx]);
      idx++;
    }
  }
  printf("%0.9lf\n", ans);
  return 0;
}
