#include <bits/stdc++.h>
using namespace std;
int t, q, x, k, s;
bool vis[100005];
struct node {
  node *left, *right;
  int minLeft, minRight;
  node() {
    left = NULL;
    right = NULL;
    minLeft = INT_MAX;
    minRight = INT_MAX;
  }
};
node* root[100005];
void myInsert(int ins, int ind) {
  node* tem = root[ind];
  for (int i = 16; i >= 0; i--) {
    int temp = (ins & (1 << i));
    if (temp != 0) {
      tem->minRight = min(tem->minRight, ins);
      if (tem->right == NULL) tem->right = new node();
      tem = tem->right;
    } else {
      tem->minLeft = min(tem->minLeft, ins);
      if (tem->left == NULL) tem->left = new node();
      tem = tem->left;
    }
  }
}
int main() {
  for (int i = 0; i < 100005; i++) {
    root[i] = new node();
  }
  cin >> q;
  for (int ii = 1; ii <= q; ii++) {
    cin >> t;
    if (t == 1) {
      cin >> x;
      if (!vis[x]) {
        vis[x] = true;
        for (int j = 1; j * j < 100005; j++) {
          if (x % j == 0) {
            myInsert(x, j);
            int temp = x / j;
            if (temp != j) {
              myInsert(x, temp);
            }
          }
        }
      }
    } else {
      cin >> x >> k >> s;
      if (x % k == 0) {
        int MAX = s - x;
        node* tem = root[k];
        bool pos = true;
        int ans = 0;
        for (int i = 16; i >= 0; i--) {
          bool rig = true;
          int temp = (x & (1 << i));
          if (temp != 0) {
            if (tem->minLeft <= MAX) {
              rig = false;
              tem = tem->left;
            } else if (tem->minRight <= MAX) {
              tem = tem->right;
            } else {
              pos = false;
              break;
            }
          } else {
            if (tem->minRight <= MAX) {
              tem = tem->right;
            } else if (tem->minLeft <= MAX) {
              rig = false;
              tem = tem->left;
            } else {
              pos = false;
              break;
            }
          }
          if (rig) {
            ans += (1 << i);
          }
        }
        if (pos)
          cout << ans << endl;
        else
          cout << -1 << endl;
      } else
        cout << -1 << endl;
    }
  }
}
