#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9;
const long long int INF = 1e18;
const int N = 100005;
const int MOD = 1e9 + 7;
const double EPS = 1e-6;
const double PI = acos(-1.0);
long long int n, m, k;
long long int ara[N], add[N], BIT[N];
struct query {
  int l, r;
  long long int val;
} Q[N];
void Update(int idx, long long int val) {
  for (; idx <= N; idx += (idx & -idx)) {
    BIT[idx] += val;
  }
}
long long int Query(int idx) {
  long long int sum = 0;
  for (; idx > 0; idx -= (idx & -idx)) {
    sum += BIT[idx];
  }
  return sum;
}
int main(int argc, char const *argv[]) {
  cin >> n >> m >> k;
  for (int i = 1; i <= n; i++) cin >> ara[i];
  for (int i = 1; i <= m; i++) {
    cin >> Q[i].l >> Q[i].r >> Q[i].val;
  }
  for (int i = 1; i <= k; i++) {
    int x, y;
    cin >> x >> y;
    add[y + 1]--, add[x]++;
  }
  for (int i = 1; i <= N; i++) {
    add[i] += add[i - 1];
  }
  for (int i = 1; i <= m; i++) {
    long long int tot = Q[i].val * add[i];
    Update(Q[i].r + 1, -tot);
    Update(Q[i].l, +tot);
  }
  for (int i = 1; i <= n; i++) {
    cout << Query(i) + ara[i] << " ";
  }
  return 0;
}
