#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const double EPS = 1e-9;
inline int cmp(double x, double y = 0, double tol = EPS) {
  return ((x <= y + tol) ? (x + tol < y) ? -1 : 0 : 1);
}
struct point {
  long long x, y;
  point(long long x = 0, long long y = 0) : x(x), y(y) {}
  point operator+(point q) { return point(x + q.x, y + q.y); }
  point operator-(point q) { return point(x - q.x, y - q.y); }
  int cmp(point q) const {
    if (int t = ::cmp(x, q.x)) return t;
    return ::cmp(y, q.y);
  }
  bool operator==(point q) const { return cmp(q) == 0; };
  bool operator!=(point q) const { return cmp(q) != 0; };
  bool operator<(point q) const { return cmp(q) < 0; };
};
ostream &operator<<(ostream &os, const point &p) {
  os << "(" << p.x << "," << p.y << ")";
}
long long dot(point a, point b) { return a.x * b.x + a.y * b.y; }
long long cross(point a, point b) { return a.x * b.y - a.y * b.x; }
long long abs2(point a) { return dot(a, a); }
bool collinear(point a, point b, point c) {
  return cmp(cross((b - a), (c - a))) == 0;
}
int ccw(point a, point b, point p) { return cmp(cross((b - a), (p - a))); }
point pivot;
bool radial_lt(point a, point b) {
  int R = ccw(pivot, a, b);
  if (R == 0)
    return dot(pivot - a, pivot - a) < dot(pivot - b, pivot - b);
  else
    return (R == 1);
}
vector<point> convexhull(vector<point> T) {
  sort(T.begin(), T.end());
  T.resize(unique(T.begin(), T.end()) - T.begin());
  int tam = 0, n = T.size();
  vector<point> U;
  int idx = min_element(T.begin(), T.end()) - T.begin();
  pivot = T[idx];
  swap(T[0], T[idx]);
  sort(++T.begin(), T.end(), radial_lt);
  for (int i = 0; i < T.size(); i++) {
    while (tam > 1 && ccw(U[tam - 2], U[tam - 1], T[i]) <= 0)
      U.pop_back(), tam--;
    U.push_back(T[i]);
    tam++;
  }
  return U;
}
void show(pair<pair<long long, long long>, pair<long long, long long> > s) {
  cout << s.first.first << " " << s.first.second << " " << s.second.first << " "
       << s.second.second << endl;
}
int least_rot(
    vector<pair<pair<long long, long long>, pair<long long, long long> > >
        second) {
  int n = second.size();
  for (int i = (0); i < (n); i++) second.push_back(second[i]);
  vector<int> f(second.size(), -1);
  int k = 0;
  for (int j = 1; j < second.size(); j++) {
    pair<pair<long long, long long>, pair<long long, long long> > sj =
        second[j];
    int i = f[j - k - 1];
    while (i != -1 && sj != second[k + i + 1]) {
      if (sj < second[k + i + 1]) k = j - i - 1;
      i = f[i];
    }
    if (sj != second[k + i + 1]) {
      if (sj < second[k]) k = j;
      f[j - k] = -1;
    } else
      f[j - k] = i + 1;
  }
  return k;
}
int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  vector<point> A(n), B(m);
  point p;
  for (int i = (0); i < (n); i++) {
    scanf("%lld %lld", &p.x, &p.y);
    A[i] = p;
  }
  for (int i = (0); i < (m); i++) {
    scanf("%lld %lld", &p.x, &p.y);
    B[i] = p;
  }
  A = convexhull(A);
  B = convexhull(B);
  n = A.size();
  m = B.size();
  if (n != m) {
    cout << "NO\n";
    return 0;
  }
  vector<pair<pair<long long, long long>, pair<long long, long long> > > AA, BB;
  point esq, dir;
  int ee, dd;
  for (int i = (0); i < (n); i++) {
    ee = i - 1;
    if (ee < 0) ee += n;
    dd = i + 1;
    if (dd >= n) dd %= n;
    esq = A[ee] - A[i], dir = A[dd] - A[i];
    AA.push_back(make_pair(make_pair(cross(esq, dir), dot(esq, dir)),
                           make_pair(abs2(esq), abs2(dir))));
  }
  for (int i = (0); i < (n); i++) {
    ee = i - 1;
    if (ee < 0) ee += n;
    dd = i + 1;
    if (dd >= n) dd %= n;
    esq = B[ee] - B[i], dir = B[dd] - B[i];
    BB.push_back(make_pair(make_pair(cross(esq, dir), dot(esq, dir)),
                           make_pair(abs2(esq), abs2(dir))));
  }
  int u = least_rot(AA);
  int v = least_rot(BB);
  bool ok = true;
  for (int i = (0); i < (n); i++) {
    if (AA[u] != BB[v]) {
      ok = false;
      break;
    }
    u = (u + 1) % n;
    v = (v + 1) % n;
  }
  if (ok)
    cout << "YES\n";
  else
    cout << "NO\n";
  return 0;
}
