#include <bits/stdc++.h>
using namespace std;
const long double eps = 1e-12;
const int MN = 300010;
struct CHT {
  vector<long long> M, B;
  void init() {
    M.clear();
    B.clear();
  }
  bool bad(int l1, int l2, int l3) {
    return (long double)(B[l3] - B[l1]) / (M[l1] - M[l3]) <=
           (long double)(B[l2] - B[l1]) / (M[l1] - M[l2]) + eps;
  }
  void add(long long m, long long b) {
    M.push_back(m);
    B.push_back(b);
    while (M.size() >= 3 && bad(M.size() - 3, M.size() - 2, M.size() - 1)) {
      M.erase(M.end() - 2);
      B.erase(B.end() - 2);
    }
    if (M.size() == 2 && M[0] == M[1]) {
      M.erase(M.end() - 2);
      B.erase(B.end() - 2);
    }
  }
  pair<long long, long long> query(long long x) {
    if (M.size() == 0) return {4e18, -1};
    int s = 0, e = (int)M.size() - 2, p = 0;
    while (s <= e) {
      int m = (s + e) >> 1;
      if ((long double)(B[m + 1] - B[m]) / (M[m] - M[m + 1]) + eps < x) {
        p = m + 1;
        s = m + 1;
      } else
        e = m - 1;
    }
    return {M[p] * x + B[p], -M[p]};
  }
} cht;
int N, M;
struct Info {
  long long t, b, s;
};
Info info[MN];
long long bsum[MN], ssum[MN];
int main() {
  scanf("%d %d", &N, &M);
  long long f = 0;
  for (int i = 0; i < M; i++) {
    int t;
    scanf("%d", &t);
    if (t == 1) {
      int k;
      scanf("%d", &k);
      info[i] = {t, k};
      f += k;
    }
    if (t == 2) {
      int k;
      scanf("%d", &k);
      info[i] = {t, k};
    }
    if (t == 3) {
      int b, s;
      scanf("%d %d", &b, &s);
      info[i] = {t, b, s};
    }
  }
  long long c = 0;
  for (int i = 0; i < M; i++) {
    long long t = info[i].t;
    long long b = info[i].b;
    long long s = info[i].s;
    if (t == 1) {
      c += b;
    }
    if (t == 3) {
      b -= s * (f - c);
      info[i] = {t, b, s};
    }
  }
  for (int i = M - 1; i >= 0; i--) {
    long long t = info[i].t;
    long long b = info[i].b;
    long long s = info[i].s;
    bsum[i] = bsum[i + 1];
    ssum[i] = ssum[i + 1];
    if (t == 3) {
      bsum[i] += b;
      ssum[i] += s;
    }
  }
  long long p = 0;
  long long q = f + N;
  cht.init();
  cht.add(-f, ssum[0] * f + bsum[0]);
  for (int i = 0; i < M; i++) {
    long long t = info[i].t;
    long long b = info[i].b;
    long long s = info[i].s;
    if (t == 1) {
      p += b;
      cht.init();
      cht.add(-(f - p), ssum[i] * (f - p) + bsum[i]);
    }
    if (t == 2) {
      cht.add(-q, ssum[i] * q + bsum[i]);
      q += b;
    }
    pair<long long, long long> d = cht.query(ssum[i + 1]);
    printf("%lld %lld\n", d.second + 1 - (f - p), d.first - bsum[i + 1]);
  }
}
