#include <bits/stdc++.h>
using namespace std;
struct pp {
  long long x, y;
};
const int base = 1000 * 1000 * 1000;
const int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int inf = (int)1e9;
const int mod = 1e9 + 7;
long long gcd(long long a, long long b) {
  while (b) {
    a %= b;
    swap(a, b);
  }
  return a;
}
long long n, m, k, x, y, z, cnt = 0, sum = 0, maxx;
long long a[111111], t[444444], b[111111], l[111111], r[111111], d[111111];
void build(long long a[], long long v, long long tl, long long tr) {
  if (tl == tr)
    t[v] = a[tl];
  else {
    long long tm = (tl + tr) / 2;
    build(a, v * 2, tl, tm);
    build(a, v * 2 + 1, tm + 1, tr);
  }
}
void update(long long v, long long tl, long long tr, long long l, long long r,
            long long add) {
  if (l > r) return;
  if (l == tl && tr == r)
    t[v] += add;
  else {
    long long tm = (tl + tr) / 2;
    update(v * 2, tl, tm, l, min(r, tm), add);
    update(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r, add);
  }
}
long long get(long long v, long long tl, long long tr, long long pos) {
  if (tl == tr) return t[v];
  int tm = (tl + tr) / 2;
  if (pos <= tm)
    return t[v] + get(v * 2, tl, tm, pos);
  else
    return t[v] + get(v * 2 + 1, tm + 1, tr, pos);
}
int main() {
  cin >> n >> m >> k;
  for (long long i = 0; i < n; i++) cin >> a[i];
  for (long long i = 0; i < m; i++) cin >> l[i] >> r[i] >> d[i];
  for (long long i = 0; i < k; i++) {
    cin >> x >> y;
    update(1, 0, m - 1, x - 1, y - 1, 1);
  }
  for (long long i = 0; i < m; i++) d[i] *= get(1, 0, m - 1, i);
  for (long long i = 0; i < 4 * m; i++) t[i] = 0;
  for (long long i = 0; i < m; i++)
    update(1, 0, n - 1, l[i] - 1, r[i] - 1, d[i]);
  for (long long i = 0; i < n; i++) cout << a[i] + get(1, 0, n - 1, i) << " ";
}
