#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<n;i++)
#define cinf(n,x) for(int i=0;i<(n);i++)cin>>x[i];
#define ft first
#define sc second
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define all(v) (v).begin(),(v).end()
#define LB(a,x) lb(all(a),x)-a.begin()
#define UB(a,x) ub(all(a),x)-a.begin()
#define mod 1000000007
//#define mod 998244353
#define FS fixed<<setprecision(15)
using namespace std;
typedef long long ll;
const double pi=3.141592653589793;
template<class T> using V=vector<T>;
using P=pair<ll,ll>;
typedef unsigned long long ull;
typedef long double ldouble;
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }
template<class T> inline void out(T a){ cout << a << '\n'; }
void YN(bool ok){if(ok) cout << "Yes" << endl; else cout << "No" << endl;}
//void YN(bool ok){if(ok) cout << "YES" << endl; else cout << "NO" << endl;}


const ll INF=1e18;
const int mx=200005;
ll dp[102][102][102];

int main(){
    //オーバーフローは大丈夫ですか？？
    cin.tie(0);ios::sync_with_stdio(false);
    ll n,x;
    cin>>n>>x;
    V<ll> a(n);
    cinf(n,a);
    ll ans=INF;
    for(ll cnt=1;cnt<=n;cnt++){
        rep(i,n+1){
            rep(j,n+1){
                rep(k,n+1) dp[i][j][k]=-INF;
            }
        }
        dp[0][0][0]=0;
        rep(i,n){
            rep(j,n){
                for(ll k=0;k<cnt;k++){
                    chmax(dp[i+1][j][k],dp[i][j][k]);
                    if(dp[i][j][k]!=-INF){
                        ll y=(k+a[i])%cnt;
                        if(dp[i][j][k]+a[i]<=x){
                            chmax(dp[i+1][j+1][y],dp[i][j][k]+a[i]);
                        }
                    }
                }
            }
        }
        if(dp[n][cnt][x%cnt]!=-INF){
            chmin(ans,(x-dp[n][cnt][x%cnt])/cnt);
        }
    }
    out(ans);
}
//ペナルティ出しても焦らない　ACできると信じろ！！！
//どうしてもわからないときはサンプルで実験　何か見えてくるかも
//頭で考えてダメなら紙におこせ！！
/*
* @author:  codancer
* @createTime:  2020-12-05, 19:52:03
*/

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <queue>
#include <ctime>
#include <cassert>
#include <complex>
#include <string>
#include <cstring>
#include <chrono>
#include <random>
#include <bitset>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
const ll mod = 1e9+7;
#define pb push_back
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define fep(i,a,b) for(int i=(a);i>=(b);i--)
#define deb(x) cerr<<#x<<" = "<<(x)<<"\n"
typedef vector<int> VI;
typedef vector<ll> VII;
typedef pair<int,int> pii;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll Rand(ll B) {
	return (ull)rng() % B;
}
char win(char a,char b){
	if(a==b) return a;
	if(a=='R'&&b=='S'||a=='S'&&b=='R') return 'R';
	if(a=='R'&&b=='P'||a=='P'&&b=='R') return 'P';
	if(a=='S'&&b=='P'||a=='P'&&b=='S') return 'S';
}
const int N = 102;
int n,k;
string s;
ll pw[101];
char solve(ll l,ll r){
	// cout<<"dad"<<endl;
	if(l==r){
		return s[l%n];
	}
	ll mid=(l+r)/2;
	return win(solve(l,mid),solve(mid+1,r));
}
int main(){
	pw[0]=1;
	for(int i=1;i<=25;i++) pw[i]=pw[i-1]*2;
		// cout<<"oo"<<endl;
	cin>>n>>k;
	cin>>s;
	cout<<solve(0,pw[min(k,25)]-1)<<endl;
	return 0;
}

//
//1 2 3 4