diff --git a/README.md b/README.md
index 99239ed..73769f3 100644
--- a/README.md
+++ b/README.md
@@ -5,9 +5,9 @@
 
 ## 1. Информация о студенте
 
-**Номер группы**: 00-000
+**Номер группы**: 11-104
 
-**Фамилия и Имя**: Иванов Иван
+**Фамилия и Имя**: Камалов Нияз
 
 ## 2. Описание задания
 
diff --git a/src/min_binary_heap.cpp b/src/min_binary_heap.cpp
index c24a514..a37499d 100644
--- a/src/min_binary_heap.cpp
+++ b/src/min_binary_heap.cpp
@@ -36,7 +36,7 @@ namespace assignment {
 
   bool MinBinaryHeap::Insert(int key, int value) {
 
-    if (size_ == capacity_) {
+    if (size_ >= capacity_) {
       // двоичная куча заполнена, операция вставки нового узла невозможна
       return false;
     }
@@ -45,8 +45,10 @@ namespace assignment {
     // 1. Вставьте новый узел в "конец" массива.
     // 2. Увеличьте размер двоичной кучи.
     // 3. Вызовите операцию sift_up над индексом вставленного элемента.
-
-    return false;
+    data_[size_] = Node(key, value);
+    size_ += 1;
+    sift_up(size_-1);
+    return true;
   }
 
   std::optional<int> MinBinaryHeap::Extract() {
@@ -61,8 +63,13 @@ namespace assignment {
     // 2. В корень поместите последний элемент (правый нижний в куче).
     // 3. Уменьшите размер двоичной кучи.
     // 4. Вызовите функцию "спуска" узлов heapify над индексом корня.
-
-    return std::nullopt;
+    int value = data_[0].value;
+    Node last = data_[size_-1];
+    data_[0].key = last.key;
+    data_[0].value = last.value;
+    size_ -= 1;
+    heapify(0);
+    return value;
   }
 
   bool MinBinaryHeap::Remove(int key) {
@@ -74,16 +81,26 @@ namespace assignment {
     // 2. Установите ключом удаляемого узла наименьшее возможное значение ключа min_key_value.
     // 3. Вызовите над индексом удаляемого элемента функцию sift_up.
     // 4. Извлеките корневой (удаляемый) узел из кучи операцией Extract.
+    auto index = search_index(key);
+    if (!index.has_value()) {
+      return false;
+    }
 
+    data_[index.value()].key = min_key_value;
+    sift_up(index.value());
+    Extract();
     return true;
   }
 
   void MinBinaryHeap::Clear() {
-    // Write your code here ...
+    size_ = 0;
   }
 
   std::optional<int> MinBinaryHeap::Search(int key) const {
-    // Write your code here ...
+    auto index = search_index(key);
+    if (index.has_value()) {
+      return data_[index.value()].value;
+    }
     return std::nullopt;
   }
 
@@ -153,8 +170,12 @@ namespace assignment {
   }
 
   std::optional<int> MinBinaryHeap::search_index(int key) const {
-    // Write your code here ...
+    for (int i = 0; i < size_; i++) {
+      if (data_[i].key == key) {
+        return i;
+      }
+    }
     return std::nullopt;
   }
 
-}  // namespace assignment
+}  // namespace assignment
\ No newline at end of file