#include <bits/stdc++.h>
using namespace std;
using lld = int64_t;
struct PT {
  lld x, y;
  PT() : x(0), y(0) {}
  PT(lld a, lld b) : x(a), y(b) {}
  PT operator-(const PT& a) const { return PT(x - a.x, y - a.y); }
};
lld dot(const PT& a, const PT& b) { return a.x * b.x + a.y * b.y; }
lld cross(const PT& a, const PT& b) { return a.x * b.y - a.y * b.x; }
class ConvexHull_2D {
 private:
  vector<PT> dots;

 public:
  inline void init() { dots.clear(); }
  void insert(const PT& x) { dots.push_back(x); }
  void solve() {
    sort(begin(dots), end(dots), [](const PT& a, const PT& b) {
      return tie(a.x, a.y) < tie(b.x, b.y);
    });
    vector<PT> stk((static_cast<int>((dots).size())) << 1);
    int top = 0;
    for (auto p : dots) {
      while (top >= 2 and
             cross(p - stk[top - 2], stk[top - 1] - stk[top - 2]) <= 0)
        top--;
      stk[top++] = p;
    }
    for (int i = (static_cast<int>((dots).size())) - 2, t = top + 1; i >= 0;
         i--) {
      while (top >= t and
             cross(dots[i] - stk[top - 2], stk[top - 1] - stk[top - 2]) <= 0)
        top--;
      stk[top++] = dots[i];
    }
    stk.resize(top - 1);
    swap(stk, dots);
  }
  vector<PT> get() { return dots; }
};
ConvexHull_2D cv;
inline bool check(const vector<lld>&, const vector<lld>&);
vector<lld> get_it(const vector<PT>& a) {
  vector<lld> ret;
  ret.push_back(dot(a.back() - a[0], a.back() - a[0]));
  ret.push_back(dot(a.back() - a[0], a[1] - a[0]));
  for (int i = 1; i < (static_cast<int>((a).size())) - 1; i++) {
    ret.push_back(dot(a[i - 1] - a[i], a[i - 1] - a[i]));
    ret.push_back(dot(a[i - 1] - a[i], a[i + 1] - a[i]));
  }
  ret.push_back(dot(a[(static_cast<int>((a).size())) - 2] -
                        a[(static_cast<int>((a).size())) - 1],
                    a[(static_cast<int>((a).size())) - 2] -
                        a[(static_cast<int>((a).size())) - 1]));
  ret.push_back(dot(a[(static_cast<int>((a).size())) - 2] -
                        a[(static_cast<int>((a).size())) - 1],
                    a[0] - a[(static_cast<int>((a).size())) - 1]));
  return ret;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  int n, m;
  cin >> n >> m;
  cv.init();
  for (int i = 0; i < n; i++) {
    lld x, y;
    cin >> x >> y;
    cv.insert(PT(x, y));
  }
  cv.solve();
  vector<PT> one = cv.get();
  cv.init();
  for (int i = 0; i < m; i++) {
    lld x, y;
    cin >> x >> y;
    cv.insert(PT(x, y));
  }
  cv.solve();
  vector<PT> two = cv.get();
  if ((static_cast<int>((one).size())) != (static_cast<int>((two).size())) or
      !check(get_it(one), get_it(two)))
    cout << "NO" << '\n';
  else
    cout << "YES" << '\n';
  return 0;
}
inline bool check(const vector<lld>& a, const vector<lld>& b) {
  for (int i = 0; i < (static_cast<int>((a).size())); i++) {
    bool flag = true;
    for (int j = 0; j < (static_cast<int>((b).size())); j++) {
      flag &= (a[(i + j) % (static_cast<int>((a).size()))] == b[j]);
      if (!flag) break;
    }
    if (flag) return true;
  }
  return false;
}
