#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000000;
const int MAX = 100005;
const int RIGHT = 131072;
const int SIZE = 263000;
double L[MAX], R[MAX], T[SIZE];
int X[MAX], H[MAX], N, M;
pair<int, int> Mush[MAX];
void update(int l, int r, double p, int n, int a, int b) {
  if (a > r || b < l) return;
  if (a >= l && b <= r) {
    T[n] *= p;
    return;
  }
  int mid = (a + b) / 2;
  update(l, r, p, 2 * n, a, mid);
  update(l, r, p, 2 * n + 1, mid + 1, b);
}
double query(int x, int n, int a, int b) {
  if (a > x || b < x) return 1.0;
  if (a == b) return T[n];
  int mid = (a + b) / 2;
  return T[n] * query(x, 2 * n, a, mid) * query(x, 2 * n + 1, mid + 1, b);
}
int main() {
  scanf("%d%d", &N, &M);
  for (int i = (1); i <= (N); i++)
    scanf("%d%d%lf%lf", &X[i], &H[i], &L[i], &R[i]);
  for (int i = (1); i <= (N); i++) L[i] /= 100.0, R[i] /= 100.0;
  for (int i = (1); i <= (M); i++)
    scanf("%d%d", &Mush[i].first, &Mush[i].second);
  sort(Mush + 1, Mush + 1 + M);
  for (int i = (1); i <= (SIZE - 1); i++) T[i] = 1.0;
  for (int i = (1); i <= (N); i++) {
    int a, b;
    a = lower_bound(Mush + 1, Mush + M + 1, make_pair(X[i] - H[i], 0)) - Mush;
    b = lower_bound(Mush + 1, Mush + M + 1, make_pair(X[i], 0)) - Mush - 1;
    update(a, b, 1.0 - L[i], 1, 1, RIGHT);
    a = upper_bound(Mush + 1, Mush + M + 1, make_pair(X[i], 1000000005)) - Mush;
    b = upper_bound(Mush + 1, Mush + M + 1,
                    make_pair(X[i] + H[i], 1000000005)) -
        Mush - 1;
    update(a, b, 1.0 - R[i], 1, 1, RIGHT);
  }
  double ans = 0;
  for (int i = (1); i <= (M); i++)
    ans += query(i, 1, 1, RIGHT) * Mush[i].second;
  cout << setprecision(15) << fixed << ans;
}
