#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:10000000")
using namespace std;
int s, f, b[100005], e[100005], l[100005], n, r[100005], m, i, k, p;
long long cur, a[100005], d[100005], q[500001];
int build_tree(int n) {
  int j = 1;
  while (j < n) j *= 2;
  for (int i = 1; i <= j + n - 1; i++) q[i] = 0;
  return (j - 1);
}
void renew(int l, int r, long long p) {
  while (l <= r) {
    if (l % 2 == 1) {
      q[l] += p;
      l++;
    };
    if (r % 2 == 0) {
      q[r] += p;
      r--;
    }
    l /= 2;
    r /= 2;
  }
}
long long find(int v) {
  long long ans = 0;
  while (v > 0) {
    ans += q[v];
    v /= 2;
  }
  return ans;
}
int main() {
  scanf("%d %d %d", &n, &m, &k);
  for (i = 1; i <= n; i++) scanf("%I64d", &a[i]);
  for (i = 1; i <= m; i++) {
    scanf("%d %d %d", &l[i], &r[i], &d[i]);
    b[i] = 0;
    e[i] = 0;
  }
  p = build_tree(n);
  for (i = 1; i <= k; i++) {
    scanf("%d %d", &s, &f);
    b[s]++;
    e[f]++;
  }
  cur = 0;
  for (i = 1; i <= m; i++) {
    cur += b[i];
    renew(p + l[i], p + r[i], d[i] * cur);
    cur -= e[i];
  }
  for (i = 1; i <= n; i++) printf("%I64d ", a[i] + find(p + i));
}
