#include <bits/stdc++.h>
using namespace std;
int x[10005];
int y[10005];
int query(int x, int y) {
  printf("0 %d %d\n", x, y);
  fflush(stdout);
  scanf("%d", &x);
  return x;
}
int main() {
  int bas = 0;
  srand(time(NULL));
  for (int i = (int)(1); i <= (int)(8); i++) bas = bas * 10 + rand() % 10;
  if (rand() & 1) bas *= -1;
  int px = -1e8, d = 1;
  for (; px <= 1e8;) {
    int dx = query(px, px);
    if (dx == 0) {
      if (!query(px, bas)) x[++*x] = px;
      if (!query(bas, px)) y[++*y] = px;
      d = 1;
      px++;
      if (px + 100 <= 1e8 && query(px + 100, px + 100) == 101)
        px += 100, d += 100;
    } else {
      int dif = min(d, dx);
      px += dif;
      d += dif;
    }
  }
  printf("1 %d %d\n", *x, *y);
  for (int i = (int)(1); i <= (int)(*x); i++) printf("%d ", x[i]);
  puts("");
  for (int i = (int)(1); i <= (int)(*y); i++) printf("%d ", y[i]);
  puts("");
}
