#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
using namespace std;
typedef   long long int ll;
typedef unsigned long long int sll;
typedef  long double ld;
typedef tree <int,null_type,less <int>, rb_tree_tag, tree_order_statistics_node_update> indexed_set;
#define rep(g, i, n) for (ll g = i; g < n; g++)
#define rev(g, n, i) for (ll g = n - 1; g >= i; g--)
#define FAST ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define all(v) v.begin(), v.end()
#define pb push_back
#define pf push_front
#define ppb pop_back
#define ppf pop_front
#define mp make_pair
 
#define um unordered_multiset
#define us unordered_set
#define mxe(v) *max_element(v.begin(),v.end())
#define mne(v) *min_element(v.begin(),v.end())
#define bs binary_search
#define lb lower_bound
#define ub upper_bound
#define ve vector
#define br break
#define rem 500009
#define PI 3.1415926535
#define INF 1000000000000 
ll n,m=1e17,k=0,r=0,z;
queue<ll> q;
bool b=false;
ll A=1000000007  ;
ve<ll > adj[100005];
ve<ll> height(100005);
ve<bool> visited(100005,false);
ve<ll> vis(100005,0);
ve<ll>segtree;
ve<ll> first(100005);
ve<ll> d(100005);
ve<ll> d1(100005);

ve<ll> a(100005);
///ve<ll> xx(1000000005);
ve<ll> euler;

ll power(ll x,ll y,ll m)
 {   x=x%m;
       ll res=1;
       while(y>0)
       {
         if(y&1)
         {
            res*=x;
            res%=m;
         }
         x=(x*x)%m;
           y=y>>1;                   
       }
       
       return res;
 }      
void dfs1(ll x,ll y)
{
    vis[x]=true;
    d[x]=(d[y]*a[x])%A;
    d1[x]=(d1[y]*power(a[x],A-2,A))%A;
    
    for(auto i:adj[x])
    {
       if(vis[i]==0)
       {
        dfs1(i,x);                      
       }
    }
    
    return;
}
 void dfs(vector<ll>adj[], ll node, ll h = 0) {
        visited[node] = true;
        height[node] = h;
        first[node] = euler.size();
        euler.push_back(node);
        for (auto to : adj[node]) {
            if (!visited[to]) {
                dfs(adj, to, h + 1);
                euler.push_back(node);
            }
        }
    }

    void build(ll node, ll b, ll e) {
        if (b == e) {
            segtree[node] = euler[b];
        } else {
            ll mid = (b + e) / 2;
            build(node << 1, b, mid);
            build(node << 1 | 1, mid + 1, e);
            ll l = segtree[node << 1], r = segtree[node << 1 | 1];
            segtree[node] = (height[l] < height[r]) ? l : r;
        }
    }

    ll query(ll node, ll b, ll e, ll L, ll R) {
        if (b > R || e < L)
            return -1;
        if (b >= L && e <= R)
            return segtree[node];
        ll mid = (b + e) >> 1;

        ll left = query(node << 1, b, mid, L, R);
        ll right = query(node << 1 | 1, mid + 1, e, L, R);
        if (left == -1) return right;
        if (right == -1) return left;
        return height[left] < height[right] ? left : right;
    }

    ll lca(ll u, ll v) {
        ll left = first[u], right = first[v];
        if (left > right)
            swap(left, right);
        return query(1, 0, euler.size() - 1, left, right);
    } 
      
void solve()
{cin>>n;

while(n>0)
{
                       ll x=n%10;
                       if(x==7){cout<<"Yes";return;}
                       n/=10;
}
cout<<"No";
}
 
 
                       
 
 
int main()
{ FAST;
 
    ll t=1;
  ////cin>>t;
    rep(l,0,t)
    {
        solve();                   
    }
}
