#include <bits/stdc++.h>
using namespace std;
long long int modulo = 1e9 + 7;
const int limite = 1000000;
int n, m;
long long int a[limite];
vector<int> qini[limite];
vector<pair<int, int> > qfin[limite];
long long int combi[110000][101];
long long int actual[102];
long long int siguiente[102];
int main() {
  {
    for (int n = 0; n < 110000; n++)
      for (int k = 0; k <= n and k < 101; k++)
        if (k == 0 or k == n)
          combi[n][k] = 1;
        else
          combi[n][k] = (combi[n - 1][k] + combi[n - 1][k - 1]) % modulo;
  }
  cin >> n >> m;
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int i = 0; i < m; i++) {
    int l, r, k;
    cin >> l >> r >> k;
    qini[l].push_back(k);
    qfin[r].push_back(pair<int, int>(k + r - l, k));
  }
  for (int i = 1; i <= n; i++) {
    if (i > 1) cout << " ";
    vector<int> qi = qini[i];
    for (int j = 0; j < int(qi.size()); j++)
      for (int d = 0; d <= qi[j]; d++)
        actual[d] = (actual[d] + combi[qi[j]][qi[j] - d]) % modulo;
    cout << (actual[0] + a[i] + modulo) % modulo;
    vector<pair<int, int> > &qf = qfin[i];
    for (int j = 0; j < int(qf.size()); j++)
      for (int d = 0; d <= qf[j].second; d++)
        actual[d] = (actual[d] - combi[qf[j].first][qf[j].second - d]) % modulo;
    for (int d = 100; d >= 0; d--)
      siguiente[d] = (actual[d] + actual[d + 1]) % modulo;
    for (int d = 100; d >= 0; d--) actual[d] = siguiente[d];
  }
  cout << endl;
}
