#include <bits/stdc++.h>
using namespace std;
int const maxn = (int)1e5 + 111;
int const inf = (1 << 30) - 1;
int n, m, k;
long long a[maxn], L[maxn], R[maxn], q[maxn];
long long d[4 * maxn], A[4 * maxn];
void addSumD(int v, int tl, int tr, int l, int r, long long val) {
  if (r < tl || l > tr) return;
  if (l <= tl && tr <= r) {
    d[v] += val;
    return;
  }
  int tm = (tl + tr) / 2;
  addSumD(2 * v, tl, tm, l, r, val);
  addSumD(2 * v + 1, tm + 1, tr, l, r, val);
}
void addSumA(int v, int tl, int tr, int l, int r, long long val) {
  if (r < tl || l > tr) return;
  if (l <= tl && tr <= r) {
    A[v] += val;
    return;
  }
  int tm = (tl + tr) / 2;
  addSumA(2 * v, tl, tm, l, r, val);
  addSumA(2 * v + 1, tm + 1, tr, l, r, val);
}
void recD(int v, int tl, int tr, long long sum) {
  sum += d[v];
  if (tl == tr) {
    addSumA(1, 1, n, L[tl], R[tl], sum * q[tl]);
    return;
  }
  int tm = (tl + tr) / 2;
  recD(2 * v, tl, tm, sum);
  recD(2 * v + 1, tm + 1, tr, sum);
}
void recA(int v, int tl, int tr, long long sum) {
  sum += A[v];
  if (tl == tr) {
    a[tl] += sum;
    return;
  }
  int tm = (tl + tr) / 2;
  recA(2 * v, tl, tm, sum);
  recA(2 * v + 1, tm + 1, tr, sum);
}
void recc(int v, int tl, int tr) {
  cout << tl << " " << tr << " " << d[v] << endl;
  if (tl == tr) return;
  int tm = (tl + tr) / 2;
  recc(2 * v, tl, tm);
  recc(2 * v + 1, tm + 1, tr);
}
int main() {
  cin >> n >> m >> k;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }
  for (int i = 1; i <= m; i++) {
    cin >> L[i] >> R[i] >> q[i];
  }
  for (int i = 1; i <= k; i++) {
    int xx, yy;
    cin >> xx >> yy;
    addSumD(1, 1, m, xx, yy, 1);
  }
  recD(1, 1, m, 0);
  recA(1, 1, n, 0);
  for (int i = 1; i <= n; i++) {
    cout << a[i] << " ";
  }
  return 0;
}
