#include <bits/stdc++.h>
using namespace std;
long long sgn(long long a) {
  if (a < 0)
    return -1;
  else
    return 1;
}
struct pt {
  long long x;
  long long y;
  pt(long long x, long long y) : x(x), y(y) {}
  pt() {}
  pt operator+(const pt& other) const {
    return pt(this->x + other.x, this->y + other.y);
  }
  pt operator-(const pt& other) const {
    return pt(this->x - other.x, this->y - other.y);
  }
  long long operator*(const pt& other) const {
    return (long long)(this->x) * other.x + (long long)(this->y) * other.y;
  }
  bool operator==(const pt& other) const {
    return x == other.x && y == other.y;
  }
  long long angle(const pt& other) const { return x * other.x + y * other.y; }
};
istream& operator>>(istream& in, pt& p) {
  in >> p.x >> p.y;
  return in;
}
ostream& operator<<(ostream& out, const pt& p) {
  out << p.x << ' ' << p.y << "; ";
  return out;
}
template <typename T>
istream& operator>>(istream& in, vector<T>& ar) {
  for (long long i = 0; i < ar.size(); i++) {
    in >> ar[i];
  }
  return in;
}
template <typename T>
ostream& operator<<(ostream& out, vector<T>& ar) {
  for (long long i = 0; i < ar.size(); i++) {
    out << ar[i] << ' ';
  }
  return out;
}
long long vec_prod(const pt& a, const pt& b) {
  return (long long)a.x * b.y - (long long)a.y * b.x;
}
bool operator<(const pt& a, const pt& b) {
  long long v = vec_prod(a, b);
  if (v < 0) {
    return 0;
  }
  if (v > 0) {
    return 1;
  }
  if (a * a < b * b) {
    return 1;
  } else {
    return 0;
  }
}
pt left_bellow(const vector<pt>& s) {
  pt a = s[0];
  for (auto& it : s) {
    if (it.x < a.x) {
      if (it.y < a.y) {
        a = it;
      }
    }
  }
  return a;
}
vector<pt> convex_hool(vector<pt>& s) {
  pt lb = left_bellow(s);
  for (auto& it : s) {
    it = it - lb;
  }
  sort(s.begin(), s.end());
  vector<pt> hool;
  s.push_back(*s.begin());
  hool.push_back(s[0]);
  hool.push_back(s[1]);
  pt prev = *s.begin();
  for (long long i = 2; i < s.size(); i++) {
    pt p3 = s[i];
    while (hool.size() > 1) {
      pt p1 = hool[hool.size() - 2];
      pt p2 = hool[hool.size() - 1];
      auto pr = vec_prod((p2 - p1), (p3 - p2));
      if (pr <= 0) {
        if (!(p1 == p3))
          hool.pop_back();
        else
          break;
      } else {
        break;
      }
    }
    hool.push_back(p3);
  }
  hool.pop_back();
  return hool;
}
void add(string& s, const long long& mod, const long long& angle) {
  s += to_string(mod) + "$" + to_string(angle) + "#";
}
string to_s(vector<pt>& hool1) {
  string s1;
  hool1.push_back(hool1[0]);
  hool1.push_back(hool1[1]);
  for (long long i = 0; i < hool1.size() - 2; i++) {
    add(s1, (hool1[i + 1] - hool1[i]) * (hool1[i + 1] - hool1[i]),
        (hool1[i + 1] - hool1[i]).angle(hool1[i + 2] - hool1[i + 1]));
  }
  return s1;
}
long long findsecinfirst(const string& where, long long beg) {
  vector<long long> p(where.size(), 0);
  p[0] = 0;
  for (long long i = 1; i < where.size(); i++) {
    long long j = p[i - 1];
    while (j != 0 && where[j] != where[i]) {
      j = p[j - 1];
    }
    if (where[j] == where[i]) ++j;
    p[i] = j;
  }
  long long mx = 0;
  for (long long i = beg; i < where.size(); i++) {
    mx = max(mx, p[i]);
  }
  return mx;
}
signed main() {
  ios_base::sync_with_stdio(0);
  string s1, s2;
  long long n, m;
  cin >> n >> m;
  vector<pt> eng1(n), eng2(m);
  cin >> eng1;
  cin >> eng2;
  vector<pt> hool1 = convex_hool(eng1);
  vector<pt> hool2 = convex_hool(eng2);
  s1, s2;
  s1 = to_s(hool1);
  s2 = to_s(hool2);
  s1 = s1 + s1;
  s1 = s2 + "%" + s1;
  long long max_pref = findsecinfirst(s1, s2.size());
  if (max_pref == s2.size()) {
    cout << "YES";
  } else {
    cout << "NO";
  }
}
