#include <bits/stdc++.h>
using namespace std;
void _fill_int(int* p, int val, int rep) {
  int i;
  for (i = 0; i < rep; i++) p[i] = val;
}
signed long long GETi() {
  signed long long i;
  scanf("%lld", &i);
  return i;
}
int N, M;
int A[10000], B[10000];
int T[4][10000];
void solve() {
  int f, i, j, k, l, x, y;
  cin >> N >> M;
  for (i = 0; i < N; i++) A[i] = 1 << 29;
  for (i = 0; i < M; i++) {
    cin >> T[0][i] >> T[1][i] >> T[2][i] >> T[3][i];
    T[1][i]--;
    T[2][i]--;
  }
  for (i = M - 1; i >= 0; i--) {
    if (T[0][i] == 1) {
      for (j = T[1][i]; j <= T[2][i]; j++) A[j] -= T[3][i];
    } else {
      for (j = T[1][i]; j <= T[2][i]; j++) A[j] = min(A[j], T[3][i]);
    }
  }
  int ng = 0;
  memmove(B, A, sizeof(A));
  for (i = 0; i < M; i++) {
    int y = -1 << 29;
    if (T[0][i] == 1)
      for (j = T[1][i]; j <= T[2][i]; j++) B[j] += T[3][i];
    else {
      for (j = T[1][i]; j <= T[2][i]; j++) y = max(y, B[j]);
      if (y != T[3][i]) ng = 1;
    }
  }
  if (ng)
    (void)printf("NO\n");
  else {
    (void)printf("YES\n");
    for (i = 0; i < N; i++) (void)printf("%d ", A[i]);
    (void)printf("\n");
  }
}
int main(int argc, char** argv) {
  if (argc > 1) freopen(argv[1], "r", stdin);
  solve();
  return 0;
}
