#include <bits/stdc++.h>
using namespace std;
long long segt[4 * 100005], pos[4 * 100005];
void build(long long ind, long long ql, long long qr) {
  if (ql == qr) {
    pos[ql] = ind;
    segt[ind] = 0;
    return;
  }
  long long mid = (ql + qr) / 2;
  build(2 * ind, ql, mid);
  build(2 * ind + 1, mid + 1, qr);
}
void update(long long ind, long long rl, long long rr, long long ql,
            long long qr, long long val) {
  if (qr < rl || rr < ql) return;
  if (rl >= ql && qr >= rr) {
    segt[ind] += val;
    return;
  }
  long long mid = (rl + rr) / 2;
  update(2 * ind, rl, mid, ql, qr, val);
  update(2 * ind + 1, mid + 1, rr, ql, qr, val);
}
void bfs(long long i) {
  if (2 * i <= 4 * 100005) {
    segt[2 * i] += segt[i];
    bfs(2 * i);
  }
  if (2 * i + 1 <= 4 * 100005) {
    segt[2 * i + 1] += segt[i];
    bfs(2 * i + 1);
  }
}
int main() {
  long long n, m, k, i;
  cin >> n >> m >> k;
  long long arr[n + 1], l[m + 1], r[m + 1], d[m + 1], x[k + 1], y[k + 1];
  for (i = 1; i <= n; i++) cin >> arr[i];
  for (i = 1; i <= m; i++) cin >> l[i] >> r[i] >> d[i];
  for (i = 1; i <= k; i++) cin >> x[i] >> y[i];
  long long cum[m + 2];
  memset(cum, 0, sizeof(cum));
  for (i = 1; i <= k; i++) {
    cum[x[i]]++;
    cum[y[i] + 1]--;
  }
  for (i = 2; i <= m; i++) cum[i] += cum[i - 1];
  memset(segt, 0, sizeof(segt));
  build(1, 1, n);
  for (i = 1; i <= m; i++) update(1, 1, n, l[i], r[i], d[i] * cum[i]);
  bfs(1);
  for (i = 1; i <= n; i++) {
    cout << arr[i] + segt[pos[i]] << " ";
  }
}
