#include <bits/stdc++.h>
using namespace std;
const int INF_MAX = 0x7FFFFFFF;
const int INF_MIN = -(1 << 30);
const double eps = 1e-10;
const double pi = acos(-1.0);
int toInt(string s) {
  istringstream sin(s);
  int t;
  sin >> t;
  return t;
}
template <class T>
string toString(T x) {
  ostringstream sout;
  sout << x;
  return sout.str();
}
template <class T>
inline T gcd(T a, T b) {
  if (a < 0) return gcd(-a, b);
  if (b < 0) return gcd(a, -b);
  return (b == 0) ? a : gcd(b, a % b);
}
template <class T>
inline T lcm(T a, T b) {
  if (a < 0) return lcm(-a, b);
  if (b < 0) return lcm(a, -b);
  return a * (b / gcd(a, b));
}
template <class T>
inline void CLR(priority_queue<T, vector<T>, greater<T> > &Q) {
  while (!Q.empty()) Q.pop();
}
inline int random(int l, int r) { return rand() % (r - l + 1) + l; }
int dir_4[4][2] = {{0, 1}, {-1, 0}, {0, -1}, {1, 0}};
int dir_8[8][2] = {{0, 1},  {-1, 1}, {-1, 0}, {-1, -1},
                   {0, -1}, {1, -1}, {1, 0},  {1, 1}};
long long cnt[110000];
long long f[110000];
long long val[110000], l[110000], r[110000], d[110000];
int main() {
  long long n, m, k;
  cin >> n >> m >> k;
  memset(cnt, 0, sizeof(cnt));
  memset(f, 0, sizeof(f));
  for (int i = 0; i < n; i++) cin >> val[i];
  for (int i = 0; i < m; i++) {
    cin >> l[i] >> r[i] >> d[i];
    l[i]--;
    r[i];
  }
  for (int i = 0; i < k; i++) {
    long long a, b;
    cin >> a >> b;
    cnt[--a]++;
    cnt[b]--;
  }
  for (int i = 0; i < m; i++) {
    if (i > 0)
      f[i] = f[i - 1] + cnt[i];
    else
      f[i] = cnt[i];
  }
  for (int i = 0; i < m; i++) d[i] *= f[i];
  memset(cnt, 0, sizeof(cnt));
  for (int i = 0; i < m; i++) {
    cnt[l[i]] += d[i];
    cnt[r[i]] -= d[i];
  }
  long long ans = 0LL, add = 0LL;
  for (int i = 0; i < n; i++) {
    add += cnt[i];
    val[i] += add;
  }
  for (int i = 0; i < n; i++) {
    if (!i)
      cout << val[i];
    else
      cout << " " << val[i];
  }
  cout << endl;
  return 0;
}
