#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 50;
const int INF = 0x3f3f3f3f;
long long a[maxn], f[maxn], c[maxn];
struct node {
  int l, r;
  long long val;
} b[maxn];
int main() {
  int n, m, k;
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);
  for (int i = 1; i <= m; i++) scanf("%d%d%lld", &b[i].l, &b[i].r, &b[i].val);
  memset(c, 0, sizeof(c));
  for (int i = 1; i <= k; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    c[x]++;
    c[y + 1]--;
  }
  for (int i = 1; i <= m; i++) c[i] += c[i - 1];
  for (int i = 1; i <= m; i++) {
    int k = c[i];
    if (!k) continue;
    f[b[i].l] += b[i].val * k;
    f[b[i].r + 1] -= b[i].val * k;
  }
  for (int i = 1; i <= n; i++) {
    f[i] += f[i - 1];
    printf("%lld ", a[i] + f[i]);
  }
}
